Você está na página 1de 15

Replicando Rich State, Poor State, Red State, Blue State de Gelman, Shor, Bafumi e Park

Fernando Guarnieri

24 de abril de 2012

Nesta replicao iremos vericar o uso de modelos multin na prtica. Desde ca vel a as eleies que colocaram George W. Bush na presidncia a opinio pblica nos co e a u EUA (leia-se imprensa) tem dito que houve uma mudana na base de apoio de c democratas e republicanos. Os republicanos teriam passado a obter votos em estados mais pobres onde haveria um eleitor mais provinciano, mais religioso e nacionalista. Os democratas ganhariam votos nos estados mais ricos onde haveria um eleitor mais cosmopolita, mais tolerante e imbu dos de valores pso materialistas. A Figura 1 na pgina 2 mostra uma caricatura deste ponto de a vista. Essa discusso similar aquela que vimos quando analisamos o texto de Cesar a e Zucco que arma que no Brasil em 2006 teria ocorrido uma mudana na base c eleitoral de Lula. No seu texto Gelman et al. vo perguntar at que ponto o a e contexto inuencia no voto: ser que morar em um estado mais rico ou mais a pobre altera o modo como as pessoas votam? Para responder a isso os autores analisaram dados nos n veis individual, municipal e estadual. A concluso a que chegaram a de que a conexo entre renda a e a e voto, nos EUA, no simples. Estados ricos e pobres diferem na relao entre a e ca renda e inteno de voto. ca A estrutura do artigo a seguinte: primeiro analisa-se os dados no n e vel dos estados, depois no n individual e, no nal, faz-se a anlise em conjunto. Para vel a efeito de replicao vamos nos concentrar em quatro grcos: as Figuras de 1 a ca a 4. A Figura 1 de Gelman et al. mostra que os estados ricos passaram a apoiar

Figura 1: Resultado das eleioes de 2004 c os democratas. Nesta gura esto plotados os coecentes de uma regresso do a a sshare de voto Republicano na renda do estado (em 10 mil dlares de 1996). Foi o rodada uma regresso por ano e foi feito um grco com todos estados e outros a a dois separando os estados do sul dos demais. Na pgina 3 apresento a gura a original. Para reproduzir esta gura iremos rodar uma regresso do share de voto repua blicano na mdia de renda estadual para cada ano. Vamos guardar o coeciente e e o desvio padro de cada regresso (o efeito, , da renda e o desvio padro dos a a a res duos). Vamos repetir isso separando os estados do sul dos outros e, por m, vamos plotar os trs grcos como Figura 3 na pgina 6. e a a > > > > > > options(width = 60, continue = " ") # QJPS Replication # Figures 1 and 2 # Updated by David K. Park # Set Working Directory HERE 2

Figura 2: Figura 1 original de Gelman et al. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > setwd("I:/Cursos (meus)/USP") # load foreign package to read in STATA file library(foreign) # a tabela com os dados por estado n~o tem cdigo para regi~o. Nesta tem: a o a fips.cbs <- read.dta("fips.icpsr.cbs.naes.dta") # Figure 1 Regressions # state-level st <- read.table("st.dat") #dados pr estado #junta as duas bases para termos os cdigos junto com as demais variveis o a st.all <- merge(st, fips.cbs, by.x="stateabb", by.y="st") # Todos os estados st.s <- subset(st.all, st.all$regioncbs==3) # s o subconjunto (subset) o # com estados do sul st.ns <- subset(st.all, st.all$regioncbs!=3) # s o subconjunto (subset) o # com estados n~o sul a p.st.yr <- seq(min(st$year), max(st$year),4) # um vetor com cada ano # em que rodaremos a regress~o a n.st.yr <- length(p.st.yr) # o tamnaho de nosso vetor. Usaremos mais tarde. col.st.names <- c("st.int", "z.st.inc.pop") # nome de colunas para mais tarde. n.st.coef <- length(col.st.names) # tamanho do vetor com nomes de colunas. # Tambm para mais tarde. e # # # # # # Agora criaremos arrays (espcied e matrizes) para guardar os coeficientes e e desvios de cada regress~o. Eles tem que ter tantas linhas quanto os anos a em que faremos a regress~o e tantas colunas quanto coeficientes a (no caso ser~o s duas: o intercepto e coeficiente para renda. a o Da os nomes 'st.int' - statae intercept - e 'z.st.inc.pop' - standardized state income per capita, ou renda per capita estadual padronizada).

B.st.lm <- array(NA, c(n.st.yr, n.st.coef)) colnames(B.st.lm) <- col.st.names SE.st.lm <- array(NA, c(n.st.yr, n.st.coef)) colnames(SE.st.lm) <- col.st.names B.st.s.lm <- array(NA, c(n.st.yr, n.st.coef)) colnames(B.st.s.lm) <- col.st.names

> > > > > > > > > > > > > >

SE.st.s.lm <- array(NA, c(n.st.yr, n.st.coef)) colnames(SE.st.s.lm) <- col.st.names B.st.ns.lm <- array(NA, c(n.st.yr, n.st.coef)) colnames(B.st.ns.lm) <- col.st.names SE.st.ns.lm <- array(NA, c(n.st.yr, n.st.coef)) colnames(SE.st.ns.lm) <- col.st.names # Agora rodamos a regress~o para cada ano. Para isso usamos o comando for(). a # Esse tipo de comando chamado de looping pois ele fica repetindo uma a~o e ca # at certa condiao ser atingida. No caso para cada ano iremos criar um subconjunto e c # de dados e fazer a regress~o do share de votos na renda neste subconjunto. a # Depois vamos guardar em cada linha dos arrays que criamos pouco mais acima os # coeficientes resultantes de cada regress~o: a

for (i in 1:n.st.yr){ st.temp <- subset(st, st$year==p.st.yr[i]) st.reg <- summary(lm(st.temp$st.repshare ~ st.temp$z.st.inc.pop)) B.st.lm[i,] <- st.reg$coef[,1] SE.st.lm[i,] <- st.reg$coef[,2] } > for (i in 1:n.st.yr){ st.s.temp <- subset(st.s, st.s$year==p.st.yr[i]) st.s.reg <- summary(lm(st.s.temp$st.repshare ~ st.s.temp$z.st.inc.pop)) B.st.s.lm[i,] <- st.s.reg$coef[,1] SE.st.s.lm[i,] <- st.s.reg$coef[,2] } > for (i in 1:n.st.yr){ st.ns.temp <- subset(st.ns, st.ns$year==p.st.yr[i]) st.ns.reg <- summary(lm(st.ns.temp$st.repshare ~ st.ns.temp$z.st.inc.pop)) B.st.ns.lm[i,] <- st.ns.reg$coef[,1] SE.st.ns.lm[i,] <- st.ns.reg$coef[,2] } > # Agora transformamos nossos arrays em Data Frames: > > B.st.lm <- data.frame(B.st.lm) > SE.st.lm <- data.frame(SE.st.lm) > B.st.s.lm <- data.frame(B.st.s.lm) > SE.st.s.lm <- data.frame(SE.st.s.lm) > B.st.ns.lm <- data.frame(B.st.ns.lm) > SE.st.ns.lm <- data.frame(SE.st.ns.lm) > # E finalmente plotamos o resultado. > > # Figure 1 Plot > windows(width=8, height=2.5) #cria uma nova janela na dimens~o certa da figura. a > par(mfrow=c(1,3)) # muda os par^metros grficos para caberem as tr^s figuras. a a e > n.st <- NROW(B.st.lm) > # Para criar cada grfico vamos primeiro plotar um grfcio vazio. a a 4

> > > > > > > >

# # # # # #

Fazemos isso para ter mais controle dos elementos. Vamos especificar neste grfico a extens~o dos eixos X e Y (xlim e ylim), a a o tamanho da fonte do ttulo dos eixos e do ttulo principal (cex.lab e cex.main). Vamos dar um ttulo para o grfico (main) e nomes para os eixos (xlab e ylab). a Vamos deixar sem eixos para podermos trabalha-los individualmente (xaxt = "n" e yaxt = "n")

> > > > > > >

>

> > > >

>

> > > >

> > >

plot(0, 0, type='n', ylim=c(-.3, .3), xlim=c(min(st$year), max(st$year)), cex.lab=1.15, xaxt="n", yaxt="n", main="All States", cex.main=1, xlab="Year", ylab="Income Coefficient") axis(side=1, at=c(1960, 1980, 2000), cex.axis=1.1) # cria eixo X (side = 1) axis(side=2, at=c(-.2, 0, .2), cex.axis=1.1)# cria eixo Y (side = 2) abline(h=0, col="gray") # plota linha horizontal cruzando Y em zero # Agora colocamos um ponto (points) em cada ano representando o coeficiente # da renda estadual e desenhamos segmentos de reta (segments) com o valor de # um desvio padr~o : a for (i in 1:n.st) { points(p.st.yr[i], B.st.lm[i,2], type='p', pch=19) segments(p.st.yr[i], (B.st.lm[i,2]-SE.st.lm[i,2]), p.st.yr[i], (B.st.lm[i,2]+SE.st.lm[i,2])) } plot(0, 0, type='n', ylim=c(-.3, .3), xlim=c(min(st$year), max(st$year)), cex.lab=1.15, xaxt="n", yaxt="n", main="Southern States", cex.main=1, xlab="Year", ylab="Income Coefficient") axis(side=1, at=c(1960, 1980, 2000), cex.axis=1.1) axis(side=2, at=c(-.2, 0, .2), cex.axis=1.1) abline(h=0, col="gray") for (i in 1:n.st) { points(p.st.yr[i], B.st.s.lm[i,2], type='p', pch=19) segments(p.st.yr[i], (B.st.s.lm[i,2]-SE.st.s.lm[i,2]), p.st.yr[i], (B.st.s.lm[i,2]+SE.st.s.lm[i,2])) } plot(0, 0, type='n', ylim=c(-.3, .3), xlim=c(min(st$year), max(st$year)), cex.lab=1.15, xaxt="n", yaxt="n", main="Non-Southern States", cex.main=1, xlab="Year", ylab="Income Coefficient") axis(side=1, at=c(1960, 1980, 2000), cex.axis=1.1) axis(side=2, at=c(-.2, 0, .2), cex.axis=1.1) abline(h=0, col="gray") for (i in 1:n.st) { points(p.st.yr[i], B.st.ns.lm[i,2], type='p', pch=19) segments(p.st.yr[i], (B.st.ns.lm[i,2]-SE.st.ns.lm[i,2]), p.st.yr[i], (B.st.ns.lm[i,2]+SE.st.ns.lm[i,2])) } # Figure 1 # Salvamos o grfico como .pdf a savePlot(filename="styr", type=c("pdf"), device=dev.cur()) 5

All States
q

Southern States

NonSouthern States

Income Coefficient

Income Coefficient

Income Coefficient

0.2

0.2

q q q q q q q q q q q q

q q q q q

0.0

0.0

q q q q q q q

0.0

0.2
q q

q q

0.2

0.2

1960

1980 Year

2000

1960

1980 Year

2000

0.2

1960

1980 Year

2000

Figura 3: Replicao da Figura 1 de Gelman et al. ca A gura 3 reproduz quase exatamente a gura original. A unica diferena c e um outlier que est presente no sul na nossa replicao e que desaparece no a ca grco original. Este outlier um ano em que estados pobres votaram muito a e mais republicano do que de costume. Essa foi a eleio de Eisenhower para a ca presidncia. e O que estas guras mostram que a partir de 1984 estados pobres comearam a e c votar mais em candidatos republicanos. Esta tendncia acentuada nos estados e e sulinos, mas aparece claramente nos estados no sulinos a partir de 1992. a Portanto, de um ponto de vista agregado a imprensa tem razo: estados pobres a passaram a ser republicanos. Vamos vericar agora a tendncia no n individual. Para isto Gelman et al. e vel coletaram dados do National Election studies (lembra, aquela srie de surveys e que comearam na dcada de 1950 em Michigan) e rodaram uma regresso do c e a voto de cada entrevistado em sua renda, controlando por etnia, sexo, educao ca e idade. A Figura na pgina 8 mostra a original e Figura 5 na pgina 9 mostra a a o resultado da replicao. ca A replicao segue a mesma estratgia para replicar a Figura 1: ca e > > > > > > > > > > > > options(width = 60, continue = " ") # individual level anes <- read.table("recode.anes.qjps.txt") anes.s <- subset(anes, anes$regioncbs==3) anes.ns <- subset(anes, anes$regioncbs!=3) # table(anes$relatt, anes$yr) # table(anes$relatt2, anes$yr) p.yr <- seq(min(anes$yr), max(anes$yr),4) n.yr <- length(p.yr) col.names <- c("int", "z.inc") n.coef <- length(col.names) B.glm <- array(NA, c(n.yr, n.coef)) 6

> > > > > > > > > > > >

colnames(B.glm) <- col.names SE.glm <- array(NA, c(n.yr, n.coef)) colnames(SE.glm) <- col.names B.s.glm <- array(NA, c(n.yr, n.coef)) colnames(B.s.glm) <- col.names SE.s.glm <- array(NA, c(n.yr, n.coef)) colnames(SE.s.glm) <- col.names B.ns.glm <- array(NA, c(n.yr, n.coef)) colnames(B.ns.glm) <- col.names SE.ns.glm <- array(NA, c(n.yr, n.coef)) colnames(SE.ns.glm) <- col.names for (i in 1:n.yr){ temp <- subset(anes, anes$yr==p.yr[i]) reg <- summary(glm(temp$vote ~ temp$z.inc, family=binomial(link=logit))) B.glm[i,] <- reg$coef[,1] SE.glm[i,] <- reg$coef[,2] } > for (i in 1:n.yr){ temp.s <- subset(anes.s, anes.s$yr==p.yr[i]) reg.s <- summary(glm(temp.s$vote ~ temp.s$z.inc, family=binomial(link=logit))) B.s.glm[i,] <- reg.s$coef[,1] SE.s.glm[i,] <- reg.s$coef[,2] } > for (i in 1:n.yr){ temp.ns <- subset(anes.ns, anes.ns$yr==p.yr[i]) reg.ns <- summary(glm(temp.ns$vote ~ temp.ns$z.inc, family=binomial(link=logit))) B.ns.glm[i,] <- reg.ns$coef[,1] SE.ns.glm[i,] <- reg.ns$coef[,2] } > B.glm <- data.frame(B.glm) > SE.glm <- data.frame(SE.glm) > B.s.glm <- data.frame(B.s.glm) > SE.s.glm <- data.frame(SE.s.glm) > B.ns.glm <- data.frame(B.ns.glm) > SE.ns.glm <- data.frame(SE.ns.glm) > # Figure 2 Plot > windows(width=8, height=2.5) > par(mfrow=c(1,3)) > n <- NROW(B.glm) > plot(0, 0, type='n', ylim=c(-.5, 1.75), xlim=c(min(anes$yr), max(anes$yr)), cex.lab=1.15, xaxt="n", yaxt="n", main="All Individuals", cex.main=1, xlab="Year", ylab="Income Coefficient") > axis(side=1, at=c(1960, 1980, 2000), cex.axis=1.1) 7

Figura 4: Figura 2 original de Gelman et al. > > >

>

> > > >

>

> > > >

> >

axis(side=2, at=c(0, 1), cex.axis=1.1 ) abline(h=0, col="gray") for (i in 1:n) { points(p.yr[i], B.glm$z.inc[i], type='p', pch=19) segments(p.yr[i], (B.glm$z.inc[i]-SE.glm$z.inc[i]), p.yr[i], (B.glm$z.inc[i]+SE.glm$z.inc[i])) } plot(0, 0, type='n', ylim=c(-.5, 1.75), xlim=c(min(anes$yr), max(anes$yr)), cex.lab=1.15, xaxt="n", yaxt="n", main="Southerners", cex.main=1, xlab="Year", ylab="Income Coefficient") axis(side=1, at=c(1960, 1980, 2000), cex.axis=1.1) axis(side=2, at=c(0, 1), cex.axis=1.1 ) abline(h=0, col="gray") for (i in 1:n) { points(p.yr[i], B.s.glm$z.inc[i], type='p', pch=19) segments(p.yr[i], (B.s.glm$z.inc[i]-SE.s.glm$z.inc[i]), p.yr[i], (B.s.glm$z.inc[i]+SE.s.glm$z.inc[i])) } plot(0, 0, type='n', ylim=c(-.5, 1.75), xlim=c(min(anes$yr), max(anes$yr)), cex.lab=1.15, xaxt="n", yaxt="n", main="Non-Southerners", cex.main=1, xlab="Year", ylab="Income Coefficient") axis(side=1, at=c(1960, 1980, 2000), cex.axis=1.1) axis(side=2, at=c(0, 1), cex.axis=1.1 ) abline(h=0, col="gray") for (i in 1:n) { points(p.yr[i], B.ns.glm$z.inc[i], type='p', pch=19) segments(p.yr[i], (B.ns.glm$z.inc[i]-SE.ns.glm$z.inc[i]), p.yr[i], (B.ns.glm$z.inc[i]+ } # Figure 2 savePlot(filename="nesyr", type=c("pdf"), device=dev.cur())

Vemo que replicamos exatamente a Figura 5. Esta gura mostra que no n vel individual quanto mais rico o eleitor maior a probabilidade dele votar em um candidato Republicano. O que Gelamn et al. vo fazer reconciliar estes dois a e

All Individuals

Southerners

NonSoutherners

Income Coefficient

Income Coefficient

q q q q q q q

q q q q q

q q q q q q q

Income Coefficient

q q q q q q q

q q q q q q

1960

1980 Year

2000

1960

1980 Year

2000

1960

1980 Year

2000

Figura 5: Replicao da Figura 2 de Gelman et al. ca achados - estados pobres votando Republicano e eleitores pobres votando Democrata. Para isso eles vo usar um modelo multin em que os coecientes a vel (intercepto e inclinao) variam. Primeiro eles iro usar um modelo onde apeca a nas o intercepto varia. Este modelo apresentado na Figura 3 do artigo que e reproduzimos aqui na pgina 14. O resultado da replicao ser mostrado na a ca a pgina 14. a A estratgia usada por Gelman et al. para gerar os grco nas guras 6 e 7 foi a e a de preparar uma funo espec ca ca para plotar esse tipo de grco. Essa funo a ca foi criada em um script do R e pode ser utilizada em qualquer outro script toda vez que precisarmos rodar grcos parecidos. a Essa funo plota grcos de modelos multin onde temos dados individuais ca a vel combinados com dados agregados. Para utilizar esses modelos devemos, antes de tudo, carregar e combinar as bases por indiv duo e por estado. A maior parte da replicao gastaremos fazendo exatamente isso. ca Uma vez criada uma base com um indiv duo por linha e com as caracter sticas dos estados repetidas em cada linha, podemos usar a funo lmer() para calcular ca os diferentes interceptos e a inclinao da curva. A funo criada por Gelman ca ca vai pegar esses coecientes para trs estados e vai usa-los para criar os grcos. e a > > > > > > > > > > > options(width = 60, continue = " ") # O grfico na figura tr^s bem complexo. Ele exige n~o s a combina~o de bases a e e a o ca # de dados no nvel individual e agregado por estado, como tambm o uso de uma e # fun~o que executa modelos multinvel e de inmeros recursos grficos. ca u a # # O pacote ARM traz a fun~o lmer() para rodar modelos multinvel. J o grfico ca a a # ser feito a partir de uma fun~o chamada "superplot function" que foi a ca # desenvolvida por Gelman para facilitar o trabalho. # # O pacote ARM carregamos com o comando library(). # 9

> library(arm) arm (Version 1.3-07, built: 2010-10-24) Working directory is I:/Cursos (meus)/USP > > > > > > > > > > > > > > > # A fun~o para fazer o grfico carregamos usando o comando source() ca a

source("superplot function.R") # Essa fun~o depende de alguns dados que foram salvos em R por Gelman no ca # arquivo "cps.income.Rdata" load(file="cps.income.Rdata") # Criamos alguns objetos que ser~o usados mais a frente; a results=list() years=seq(1968,2004,4) state.region[8]="Northeast" # put Delaware into the Northeast state.region[20]="Northeast" # put Maryland into the Northeast #2000 # Carregamos os dados individuais annen2000.data <- read.dta("annen061229.dta",convert.factors=F) annen2000.data <- annen2000.data[is.na(annen2000.data$income) == FALSE & is.na(annen2000.data$fips)==FALSE,] #removemos missing cases > # > # Criamos as variveis do modelo e colcoamos juntamos tudo. a > income.new <- annen2000.data$income-3 # criamos novo preditor centralizando a renda > y <- annen2000.data$rep_presvote # criamos nossa varivel resposta (% votos Rep.) a > state.new <- annen2000.data$fips # criamos novo preditor com cdigos para estados igual ao o > # cdigos do nvel individual o > region <- annen2000.data$region # criamos outro preditor com regi~o a > data<-cbind(annen2000.data, income.new, y, state.new) #junta tudo > n.state <-length(unique(state.new)) # o nmero de estados u > n <- length(y) # o nmero de indivduos u > # > # Carregamos os dados por estado > state.income.data<-read.dta("avgincome_orig.dta",convert.factors=T) > # Agora separamos os anos, criando "uma base" para cada anos dentro de uma lista: > state.income<-as.list(rep(NA,9)) > i <- min(state.income.data$st_year) > while(i <= 2000){ state.income[[((i-min(state.income.data$st_year))/4)+1]] <state.income.data[state.income.data$st_year==i,] i <- i + 4 } > avg.income<-log(state.income[[9]]$st_inc10k) # a mdia de votos por estado e > # Para rodar o modelo mutlinvel usando lmer() temos que ter nossos dados

10

> > > > > >

# no formato "long", isto , com um indivduo por linha, repetindo os dados e # sobre estado. E isso que fazemos abaixo com a renda mdia por estado: e

avg.income.expanded <- avg.income[state.new] # varying intercept fit.vi.2000 <- lmer (y ~ income.new + factor(region) + avg.income.expanded + (1 | state.new), family=binomial(link="logit")) > # varying intercept and slope (para a figura 4) > > fit.2000 <- lmer (y ~ income.new*factor(region) + income.new*avg.income.expanded + (1 + income.new | state.new), family=binomial(link="logit")) > # Criamos um indicador para a regi~o (para o grfico) a a > region.indic<-read.dta("region_indic_annen2000.dta",convert.factors=F) > #2004 > # Fazemos o mesmo que para 2000: > > annen2004.data <- read.dta("annen2004_processed.dta",convert.factors=F) > annen2004.data <- annen2004.data[is.na(annen2004.data$state)==FALSE,] > state.income.data<-read.dta("avgincome_orig.dta",convert.factors=T) > income.new <- annen2004.data$income-3 > y <- annen2004.data$votechoice > state.new <- annen2004.data$state > region <- annen2004.data$region > #region <- state.region[annen2004.data$state] > data<-cbind(annen2004.data, income.new, y, state.new) > n.state <-length(unique(state.new)) > state.income<-as.list(rep(NA,9)) > i <- min(state.income.data$st_year) > while(i <= 2004){ state.income[[((i-min(state.income.data$st_year))/4)+1]] <state.income.data[state.income.data$st_year==i,] i <- i + 4 } > avg.income<-log(state.income[[9]]$st_inc10k) > n <- length(y) > avg.income.expanded <- avg.income[state.new] > fit.vi.2004 <- lmer (y ~ income.new + factor(region) + avg.income.expanded + (1 | state.new), family=binomial(link="logit")) > # Para a figura 4 > fit.2004 <- lmer (y ~ income.new*factor(region) + income.new*avg.income.expanded + (1 + income.new | state.new), family=binomial(link="logit")) > region.indic<-read.dta("region_indic_annen2000.dta",convert.factors=F) > ### Plots ### > > # Figure 3 > ## plot varying intercepts ## 11

Figura 6: Figura 3, original, de Gelman et al. > > > > # 2000 sl2000 = as.integer(rownames(coef(fit.vi.2000)[[1]])) income.vi.slope.2000 <- coef(fit.vi.2000)$state.new[,2] income.vi.intercept.2000 <- coef(fit.vi.2000)$state.new[,1] + region.indic[,1]*coef(fit.vi.2000)$state.new[,3] + region.indic[,2]*coef(fit.vi.2000)$state.new[,4] + region.indic[,3]*coef(fit.vi.2000)$state.new[,5] + coef(fit.vi.2000)$state.new[,6]*avg.income[sl2000] results[[9]]=cbind(income.vi.intercept.2000, income.vi.slope.2000) rownames(results[[9]])=sl2000 # 2004 sl2004 = as.integer(rownames(coef(fit.vi.2004)[[1]])) income.vi.slope.2004 <- coef(fit.vi.2004)$state.new[,2] income.vi.intercept.2004 <- coef(fit.vi.2004)$state.new[,1] + region.indic[,1]*coef(fit.vi.2004)$state.new[,3] + region.indic[,2]*coef(fit.vi.2004)$state.new[,4] + region.indic[,3]*coef(fit.vi.2004)$state.new[,5] + coef(fit.vi.2004)$state.new[,6]*avg.income[sl2004] results[[10]]=cbind(income.vi.intercept.2004, income.vi.slope.2004) rownames(results[[10]])=sl2004 windows(width=9.5,height=4) superp=superplot(results, start=9, end=10, rows=1, columns=2, indiv=1, lmer=1, var.slope=1, lowbound=-2, hibound=2, sf=3) savePlot("annen2000-2004_vi_superplot", type=c("pdf"))

> > > > > >

> > > > >

Essas guras mostram que em cada estado o eleitor mais rico vota em candidatos Republicanos, no entanto estados mais pobres so mais republicanos. Como a dizem os autores; a renda importa, mas a geograa tambm. A renda individual e um preditor positivo e a a renda mdia por estado um preditor negativo do e e voto em candidatos a presidncia republicanos. Os grcos nas guras 6 e 7 e a

12

2000
Probability Voting Rep 0.25 0.50 0.75 Probability Voting Rep 0.25 0.50 0.75

2004
Mississippiq

q q
q

q q qq q q q q
q

q Connecticut

Mississippiq qOhio

q
q
q

q
q
q

qq q q q q

Ohio q q Connecticut

1 0 1 Individual Income

1 0 1 Individual Income

Figura 7: Replicao da Figura 3 de Gelman et al. ca mostram, simultaneamente, variaes dentro de cada estado e entre os estados, co variaes estas que seria dif co ceis de serem percebidas olhando apenas para a tabela de coecientes. O prximo passo de Gelman et al. usar um modelo que permita, alm da o e e variao do intercepto, a variao da inclinao das curvas de cada estado. Isto ca ca ca nos mostraria como a relao entre voto e renda varia em cada estado. Para ca isso iremos usar o comando lmer() com interaes: co

> options(width = 60, continue = " ") > # varying intercept, varying slopes > > # Figure 4 > ## plot varying intercept, varying slopes ## > # 2000 > sl2000 = as.integer(rownames(coef(fit.2000)[[1]])) > ## > income.slope.2000 <- coef(fit.2000)$state.new[,2] + (coef(fit.2000)$state.new[,10])*(avg.income[sl2000] )+ region.indic[,1]*coef(fit.2000)$state.new[,7] + region.indic[,2]*coef(fit.2000)$state.new[,8] + region.indic[,3]*coef(fit.2000)$state.new[,9] > income.intercept.2000 <- coef(fit.2000)$state.new[,1] + (coef(fit.2000)$state.new[,6])*( avg.income [sl2000])+ region.indic[,1]*coef(fit.2000)$state.new[,3] + region.indic[,2]*coef(fit.2000)$state.new[,4] + region.indic[,3]*coef(fit.2000)$state.new[,5] > results[[9]]=cbind(income.intercept.2000,income.slope.2000); rownames(results[[9]])=sl2000 > # 2004 > sl2004 = as.integer(rownames(coef(fit.2004)[[1]])) > income.slope.2004 <- coef(fit.2004)$state.new[,2] +

13

Figura 8: Figura 4, original, de Gelman et al.


2000
Probability Voting Rep 0.25 0.50 0.75
Mississippiq

2004
Probability Voting Rep 0.25 0.50 0.75

Mississippiq

q q

q qq q q q q q q

Ohio

Connecticut

q
q q

q
q
q

qq q q q q

Ohio q q Connecticut

1 0 1 Individual Income

1 0 1 Individual Income

Figura 9: Replicao da Figura 4 de Gelman et al. ca (coef(fit.2004)$state.new[,10])*(avg.income[sl2004] )+ region.indic[,1]*coef(fit.2004)$state.new[,7] + region.indic[,2]*coef(fit.2004)$state.new[,8] + region.indic[,3]*coef(fit.2004)$state.new[,9] > income.intercept.2004 <- coef(fit.2004)$state.new[,1] + (coef(fit.2004)$state.new[,6])*( avg.income [sl2004])+ region.indic[,1]*coef(fit.2004)$state.new[,3] + region.indic[,2]*coef(fit.2004)$state.new[,4] + region.indic[,3]*coef(fit.2004)$state.new[,5] > results[[10]]=cbind(income.intercept.2004,income.slope.2004) > rownames(results[[10]])=sl2004 > windows(width=9.5,height=4) > superp=superplot(results, start=9, end=10, rows=1, columns=2, indiv=1, lmer=1, var.slope=1, lowbound=-2, hibound=2, sf=3) > savePlot("annen2000-2004_superplot",type=c("pdf")) Essas guras mostram que um modelo com variao no intercepto e na inclinaca

14

o trazem informaes bem interessantes. Vemos por exemplo que os pobres ca co em 2000 votaram em candidatos democratas independente do estado. Vemos tambm que nos estados ricos (representados pelo mais rico deles, Connecticut) e a renda no o melhor preditor do voto, quase todas as categorias de renda a e votam em democratas. J em 2004 a renda tambm passa a ter um efeito poa e sitivo no voto Republicano em Connecticut, mas os democratas ainda vencem em todas as categorias de renda. Vemos tambm que em 2004 os pobres de e Mississipi se dividiram entre os candidatos Republicano e Democarata. Enm, na anlise da relao entre voto e renda os modelos mutlin nos permia ca vel tem descrever a complexidade desta relao, complexidade esta que vem do fato ca de estarmos trabalhando com dados estruturados. Quando temos dados com diversos n veis de agregao podemos ter situaes, com a que vimos acima, onde ca co o n individual nos diz uma coisa e o n agregado nos diz outra. Modelos vel vel multin permitem juntarmos os dois n vel veis na anlise. a

15