knitr::opts_chunk$set(
    echo = TRUE,
    message = FALSE,
    warning = FALSE
)
setwd("~/Google Drive/GDrive/UFRGS/Ensino/20221 - ERE/ADP - Experimentos/Scripts Aulas")

Introdução

Esse é um notebook do R, escrito em R Markdown. Quando tu executas o código no notebook, os resultados aparecem embaixo do código. Eu acho uma forma legal de garantir a reprodutibilidade das análises e de mesclar comentário com resultados das análises.

Sobre os dados

Eu estou usando, com o consentimento da minha aluna, uma base de dados proveniente de um TCC que eu orientei sobre marcas humanizadas. Ela coletou 326 casos via Qualtrics, em um design de 2 fatores entre participantes: Marca “Controle” e Marca “Humanizada”.

A condição de controle apresenta o tweet stream de uma marca fictícia de celulares, lidando com um problema de uma cliente. Controle

A condição experimental apresenta a mesma marca fictícia em um tom conversacional descontraído, com gifs, imagens e informalidade. Experimental

Existem problemas de design e confounds (e.g., reclamação só na condição controle, múltiplas dimensões da humanização manipuladas de uma só vez, etc.), mas para efeitos de análise ignoraremos essas limitações por ora.

O primeiro passo é importar os dados. Eu recomendo usar sempre os dados “mais brutos”, ou seja, sem qualquer forma de processamento. No Qualtrics, essas opções são texto (TXT) ou texto - valores separados por vírgula (CSV). Ao exportar, podemos escolher se queremos os dados como variáveis nominais (“choice text”) ou números. Eu recomendo baixar os dois e usa-los de acordo com a necessidade. Não esquecer de pedir para o Qualtrics exportar a ordem da randomização das variáveis. Isso adiciona muitas variáveis à base de dados, mas é informação que pode ser útil. Outro desafio diz respeito ao formato de exportação. O Qualtrics, por default, exporta três “cabeçalhos” na base de dados, contendo nome da variável, descrições e enunciados. Se nós importarmos os dados diretos, o R julgará que todas as variáveis são strings e as operações com os dados serão limitadas (além, claro, de estarem erradas). Por isso, eu importo os dados apenas e, depois, adiciono os nomes das variáveis às bases de dados. Eu poderia abrir os dados no Excel e apagar duas linhas, mas eu quero evitar “tocar” na base de dados para minimizar chances de erro.

#importando dados numéricos como dn
require(readr)
dn<-read_csv("~/Google Drive/GDrive/UFRGS/Ensino/20221 - ERE/ADP - Experimentos/Scripts Aulas/TCC_Karen/TCC_Karen_Numeros.csv", 
             col_names = FALSE, skip = 3)
names(dn)<-read_csv("~/Google Drive/GDrive/UFRGS/Ensino/20221 - ERE/ADP - Experimentos/Scripts Aulas/TCC_Karen/TCC_Karen_Numeros.csv", 
                    col_names = FALSE)[1,]

#importando dados em texto como dt
dt<-read_csv("~/Google Drive/GDrive/UFRGS/Ensino/20221 - ERE/ADP - Experimentos/Scripts Aulas/TCC_Karen/TCC_Karen_Strings.csv", 
             col_names = FALSE, skip = 3)
names(dt)<-read_csv("~/Google Drive/GDrive/UFRGS/Ensino/20221 - ERE/ADP - Experimentos/Scripts Aulas/TCC_Karen/TCC_Karen_Strings.csv", 
                    col_names = FALSE)[1,]

Uma inspeção inicial mostra que a base “em texto” já considera as escalas como números. Podemos usar apenas essa para a análise. A função “head” mostra as primeiras cinco linhas da base / objeto. Aliás, essa função é comum a muitas linguagens de programação, inclusive ao Python.

head(dn)
## # A tibble: 6 × 53
##   StartDate           EndDate             Status IPAddress      Progress
##   <dttm>              <dttm>               <dbl> <chr>             <dbl>
## 1 2021-04-22 15:01:39 2021-04-22 15:06:26      0 179.232.95.187      100
## 2 2021-04-22 15:10:26 2021-04-22 15:12:16      0 179.232.95.187      100
## 3 2021-04-22 18:28:11 2021-04-22 18:30:43      0 189.6.242.184       100
## 4 2021-04-22 18:26:16 2021-04-22 18:32:21      0 177.79.5.161        100
## 5 2021-04-22 18:29:08 2021-04-22 18:32:58      0 187.71.140.167      100
## 6 2021-04-22 18:32:12 2021-04-22 18:35:56      0 186.219.134.85      100
## # … with 48 more variables: Duration (in seconds) <dbl>, Finished <dbl>,
## #   RecordedDate <dttm>, ResponseId <chr>, RecipientLastName <lgl>,
## #   RecipientFirstName <lgl>, RecipientEmail <lgl>, ExternalReference <lgl>,
## #   LocationLatitude <dbl>, LocationLongitude <dbl>, DistributionChannel <chr>,
## #   UserLanguage <chr>, Consentimento <dbl>, Q01 <dbl>, Q02 <dbl>, Q03 <dbl>,
## #   Q04 <dbl>, Q05 <dbl>, Q06 <dbl>, Q07 <dbl>, Q08 <dbl>, Q09 <dbl>,
## #   Q10 <dbl>, Q11 <dbl>, Q01 <dbl>, Q02 <dbl>, Q03 <dbl>, Q04 <dbl>, …
head(dt)
## # A tibble: 6 × 53
##   StartDate           EndDate             Status     IPAddress      Progress
##   <dttm>              <dttm>              <chr>      <chr>             <dbl>
## 1 2021-04-22 15:01:39 2021-04-22 15:06:26 IP Address 179.232.95.187      100
## 2 2021-04-22 15:10:26 2021-04-22 15:12:16 IP Address 179.232.95.187      100
## 3 2021-04-22 18:28:11 2021-04-22 18:30:43 IP Address 189.6.242.184       100
## 4 2021-04-22 18:26:16 2021-04-22 18:32:21 IP Address 177.79.5.161        100
## 5 2021-04-22 18:29:08 2021-04-22 18:32:58 IP Address 187.71.140.167      100
## 6 2021-04-22 18:32:12 2021-04-22 18:35:56 IP Address 186.219.134.85      100
## # … with 48 more variables: Duration (in seconds) <dbl>, Finished <lgl>,
## #   RecordedDate <dttm>, ResponseId <chr>, RecipientLastName <lgl>,
## #   RecipientFirstName <lgl>, RecipientEmail <lgl>, ExternalReference <lgl>,
## #   LocationLatitude <dbl>, LocationLongitude <dbl>, DistributionChannel <chr>,
## #   UserLanguage <chr>, Consentimento <chr>, Q01 <dbl>, Q02 <dbl>, Q03 <dbl>,
## #   Q04 <dbl>, Q05 <dbl>, Q06 <dbl>, Q07 <dbl>, Q08 <dbl>, Q09 <dbl>,
## #   Q10 <dbl>, Q11 <dbl>, Q01 <dbl>, Q02 <dbl>, Q03 <dbl>, Q04 <dbl>, …

Porque minha aluna já tinha me dito que ela testou duas vezes o questionário, eu sei que precisamos nos livrar das primeiras duas linhas de dados. Mas vamos confirmar se esse é o caso.

names(dt)
##  [1] "StartDate"             "EndDate"               "Status"               
##  [4] "IPAddress"             "Progress"              "Duration (in seconds)"
##  [7] "Finished"              "RecordedDate"          "ResponseId"           
## [10] "RecipientLastName"     "RecipientFirstName"    "RecipientEmail"       
## [13] "ExternalReference"     "LocationLatitude"      "LocationLongitude"    
## [16] "DistributionChannel"   "UserLanguage"          "Consentimento"        
## [19] "Q01"                   "Q02"                   "Q03"                  
## [22] "Q04"                   "Q05"                   "Q06"                  
## [25] "Q07"                   "Q08"                   "Q09"                  
## [28] "Q10"                   "Q11"                   "Q01"                  
## [31] "Q02"                   "Q03"                   "Q04"                  
## [34] "Q05"                   "Q06"                   "Q07"                  
## [37] "Q08"                   "Q09"                   "Q01"                  
## [40] "Q01"                   "Q02"                   "Q03"                  
## [43] "Q04_1"                 "Q04_2"                 "Q04_3"                
## [46] "Q05"                   "Q06"                   "Q01"                  
## [49] "FL_20_DO"              "CondControle_DO"       "CondHumana_DO"        
## [52] "Atitude_DO"            "ItensHumanização_DO"

Ops. Parece que a nomeação das variáveis tem um problema. O Qualtrics nos permite nomear variáveis. Eu recomendo que as nomes sejam sempre (1) diagnósticos: nos permitam saber exatamente do que se trata a variável sem precisar recorrer ao questionário ou dicionário de variáveis e (2) simples: o menor número de caracteres possível (precisaremos digitar o nome das variáveis pelo menos uma vez), sem letras maiusculas (o R diferencia capitalização), sem acentuação (pode dar problema), não começando em números (o R não permite que objetos e variáveis tenham nomes que começam em números). Eu vou concertar os nomes das duas bases aqui. Eu li o questionário e destilei as características principais de cada variável.

nomes_corrigidos<-c("StartDate", "EndDate", "Status", "IPAddress", "Progress", 
                    "Duration", "Finished", "RecordedDate", "ResponseId", 
                    "RecipientLastName", "RecipientFirstName", "RecipientEmail",
                    "ExternalReference", "LocationLatitude", "LocationLongitude",
                    "DistributionChannel", "UserLanguage", "Consentimento", 
                    "a1_reputacao", "a2_cara", "a3_prestigio", "a4_qualidade", 
                    "a5_gosto", "a6_melhor", "a7_admiro", "a8_simpatia", 
                    "a9_compraria", "a10_recomendaria", "a11_prefiro", 
                    "h1_homens", "h2_humanas", "h3_amigos", "h4_personalidade", 
                    "h5_atraente", "h6_medo", "h7_emocional", "h8_aberta", 
                    "h9_etica", "humanizada", "genero", "idade", "escolaridade", 
                    "freq_twitter", "freq_instagram", "freq_facebook", 
                    "sabia_humanizada", "comentário", "sorteio", "condicao", 
                    "CondControle_DO", "CondHumana_DO", "Atitude_DO", 
                    "ItensHumanização_DO")
#ver se o número de variáveis nas bases "match" o número de variáveis que eu digitei
length(names(dt))
## [1] 53
length(names(dn))
## [1] 53
length(nomes_corrigidos)
## [1] 53
#já que eles todos têm o mesmo número de elementos
names(dt)<-nomes_corrigidos
names(dn)<-nomes_corrigidos

Limpeza da base de dados

Agora sim, limpando a base de dados. Como eu havia comentado, a minha aluna rodou o estudo duas vezes e deixou esses dados na base. Precisamos eliminar.

names(dt)
##  [1] "StartDate"           "EndDate"             "Status"             
##  [4] "IPAddress"           "Progress"            "Duration"           
##  [7] "Finished"            "RecordedDate"        "ResponseId"         
## [10] "RecipientLastName"   "RecipientFirstName"  "RecipientEmail"     
## [13] "ExternalReference"   "LocationLatitude"    "LocationLongitude"  
## [16] "DistributionChannel" "UserLanguage"        "Consentimento"      
## [19] "a1_reputacao"        "a2_cara"             "a3_prestigio"       
## [22] "a4_qualidade"        "a5_gosto"            "a6_melhor"          
## [25] "a7_admiro"           "a8_simpatia"         "a9_compraria"       
## [28] "a10_recomendaria"    "a11_prefiro"         "h1_homens"          
## [31] "h2_humanas"          "h3_amigos"           "h4_personalidade"   
## [34] "h5_atraente"         "h6_medo"             "h7_emocional"       
## [37] "h8_aberta"           "h9_etica"            "humanizada"         
## [40] "genero"              "idade"               "escolaridade"       
## [43] "freq_twitter"        "freq_instagram"      "freq_facebook"      
## [46] "sabia_humanizada"    "comentário"          "sorteio"            
## [49] "condicao"            "CondControle_DO"     "CondHumana_DO"      
## [52] "Atitude_DO"          "ItensHumanização_DO"

E a variável sorteio. Vamos ver onde esses casos estão

head(dt$sorteio)
## [1] "KAREN - DESCONSIDERAR"   "KAREN 2 - DESCONSIDERAR"
## [3] "51991838706"             "51998036343"            
## [5] "51980424234"             "51 997799888"

São os dois primeiros casos. Vamos elimina-los das duas bases de dados. Eu vou criar uma base nova, sem esses dois casos. Eu não vou manter o mesmo nome, do contrário a base pode ser corrompida múltiplas vezes. Existem várias formas de fazer isso. Eu posso pedir para o R eliminar os casos cujas respostas para a variável sorteio são “KAREN - DESCONSIDERAR” e “KAREN 2 - DESCONSIDERAR” respectivamente. Ou, nesse caso, posso pedir só para apagar os dois primeiros casos. Daqui em diante usarei só a base “dt” que tem números nas escalas e texto quando apropriado.

d<-dt[-c(1,2),]
head(d$sorteio)
## [1] "51991838706"                  "51998036343"                 
## [3] "51980424234"                  "51 997799888"                
## [5] "brunalimalampert@hotmail.com" "sinhorellivictoria@gmail.com"

Eu quero verificar quem acabou o questionário. Para isso, eu farei uma tabela e a colocarei em um formato mais amigável usando uma função do markdown, Kable.

require(knitr)
require(questionr)
table(d$Finished)
## 
## FALSE  TRUE 
##   125   199
d$Acabou<-factor(d$Finished, levels = c("FALSE","TRUE"), labels = c("Não","Sim"))
t.acabou<-freq(d$Acabou, digits = 2, exclude = NA, total = T)
kable(t.acabou, caption = "Quantos acabaram o questionário")
Quantos acabaram o questionário
n %
Não 125 38.58
Sim 199 61.42
Total 324 100.00

Muita gente não acabou o questionário. Muitos respondentes não inseriram o email ou telefone para o sorteio, outros não enviaram o questionário. TODOS os testes que eu farei aqui eliminam missings do processo de análise, e as não respostas acabariam sendo eliminadas. Mesmo assim, eu eliminarei os que não acabaram o questionário da amostra.

d.f<-subset(d, d$Acabou == "Sim")

Análises iniciais - Caracterização do Respondente

A forma mais simples de fazer uma tabela de frequências é com o comando “table”. Ela é, também, a forma menos “pronta para o consumo”.

table(d.f$genero)
## 
##  Homem Mulher 
##     67    132
prop.table(table(d.f$genero))*100
## 
##    Homem   Mulher 
## 33.66834 66.33166

O pacote usado acima “questionr” é um pacote com várias funções para lidar com estatísticas descritivas. Existem outros tantos pacotes para isso, mas eu vou com esse mesmo. Nele, a função “freq” monta uma tabela de frequência com totais. A função “kable” coloca essa tabela em um formato amigável para apresentaç

t.genero <- freq(d.f$genero, digits = 2, exclude = NA, total = T)
kable(t.genero, caption = "Distribuição de Respondentes por Gênero")
Distribuição de Respondentes por Gênero
n %
Homem 67 33.67
Mulher 132 66.33
Total 199 100.00

Normalmente, para tabelas de frequências com poucos casos, eu não faço um gráfico. Digamos, entretanto, que eu queira fazer um gráfico de pizza.

require(ggsci)
require(ggplot2)
ggplot(t.genero[-3,], aes(x="", y=`%`,fill=rownames(t.genero[-3,]), label = round(`%`,2)))+
  geom_bar(width = 1, stat = "identity")+
  geom_text(position = position_stack(vjust = 0.5),size = 5)+
  scale_fill_npg() +
  labs(x=NULL,fill="Sexo",y="%",title="Gênero dos Respondentes")+
  coord_polar("y", start=0)

Em seguida, vamos dar uma olhada na idade dos respondentes

mean(d.f$idade, na.rm = T)
## [1] 28.76884
sd(d.f$idade, na.rm = T)
## [1] 9.949206
library(psych)
describe(d.f$idade)
##    vars   n  mean   sd median trimmed  mad min max range skew kurtosis   se
## X1    1 199 28.77 9.95     25   26.94 4.45  18  84    66 2.26     6.32 0.71

Então, podemos observar que a média de idade é de 28.77 anos, com um desvio-padrão de 9.95.

Vamos fazer um gráfico? Para esse tipo de variável, faz mais sentido fazer um histograma.

ggplot(d, aes(x=idade)) + 
  geom_histogram(aes(y=..density..),binwidth = 1, color="grey",fill="grey")+
  geom_density(alpha=.2, fill="green")+
  geom_vline(aes(xintercept=mean(idade,na.rm=T)),color="blue",linetype="dashed",size=1)+
  labs(title="Idade dos Respondentes",y=NULL,x="Idade")

Será que existem outliers na idade? Sim, mas não faremos nada a respeito! (Por que faríamos?)

idade.out<-boxplot(d.f$idade, col = "pink")

sort(idade.out$out)
##  [1] 44 49 52 54 55 55 57 58 58 58 61 61 64 84

E como é a distribuição de respondentes por escolaridade?

t.escola <- freq(d.f$escolaridade, digits = 2, exclude = NA, total = T, sort = "dec")
kable(t.escola, caption = "Distribuição de Respondentes por Escolaridade")
Distribuição de Respondentes por Escolaridade
n %
Ensino Superior - Incompleto 108 54.27
Ensino Superior - Completo 39 19.60
Pós-graduação 37 18.59
Ensino Médio - Completo 9 4.52
Mestrado 5 2.51
Doutorado 1 0.50
Total 199 100.00

Poderíamos fazer só um gráfico de pizza, mas para variar faremos um de colunas também.

library(ggrepel)
ggplot(t.escola[-7,], aes(x="", y=`%`,fill=rownames(t.escola[-7,]), label = round(`%`,2)))+
  geom_bar(width = 1, stat = "identity")+
  geom_text_repel(position = position_stack(vjust = 0.5),size = 5)+
  scale_fill_simpsons() +
  labs(x=NULL,fill="Sexo",y="%",title="Gênero dos Respondentes")+
  coord_polar("y", start=0)

ggplot(t.escola[-7,], aes(x=rownames(t.escola[-7,]), y=`%`)) +
  geom_col(fill = "lightblue")+
  geom_text(aes(label = round(`%`, 1)), vjust = -.5)+
  labs(x = "Escolaridade", y = "%", title = "Distribuição da Escolaridade")

Números por condição e médias

Aqui eu criarei variáveis compostas (médias) para Atitude e Humanização da Marca e extrairei o Alfa de Cronbach.

d.f$atitude.df <- data.frame(d.f$a1_reputacao, d.f$a2_cara, d.f$a3_prestigio, 
                            d.f$a4_qualidade, d.f$a5_gosto, d.f$a6_melhor,
                            d.f$a7_admiro, d.f$a8_simpatia, d.f$a9_compraria, 
                            d.f$a10_recomendaria, d.f$a11_prefiro)
d.f$atitude<-rowMeans(d.f$atitude.df, na.rm = TRUE)

d.f$human.df <- data.frame(d.f$h1_homens, d.f$h2_humanas, d.f$h3_amigos, d.f$h4_personalidade, 
                          d.f$h5_atraente, d.f$h6_medo, d.f$h7_emocional, d.f$h8_aberta, 
                          d.f$h9_etica)
d.f$human <- rowMeans(d.f$human.df, na.rm = TRUE)

require(psych)
psych::alpha(d.f$atitude.df)
## 
## Reliability analysis   
## Call: psych::alpha(x = d.f$atitude.df)
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean sd median_r
##       0.96      0.96    0.96      0.67  22 0.004  2.3  1     0.75
## 
##  lower alpha upper     95% confidence boundaries
## 0.95 0.96 0.97 
## 
##  Reliability if an item is dropped:
##                      raw_alpha std.alpha G6(smc) average_r S/N alpha se  var.r
## d.f.a1_reputacao          0.95      0.95    0.96      0.65  19   0.0047 0.0479
## d.f.a2_cara               0.97      0.97    0.97      0.76  32   0.0031 0.0017
## d.f.a3_prestigio          0.95      0.95    0.96      0.66  19   0.0045 0.0499
## d.f.a4_qualidade          0.95      0.95    0.96      0.66  20   0.0044 0.0513
## d.f.a5_gosto              0.95      0.95    0.96      0.65  19   0.0046 0.0485
## d.f.a6_melhor             0.95      0.95    0.96      0.66  19   0.0045 0.0493
## d.f.a7_admiro             0.95      0.95    0.96      0.66  19   0.0046 0.0483
## d.f.a8_simpatia           0.95      0.95    0.96      0.65  19   0.0047 0.0465
## d.f.a9_compraria          0.95      0.95    0.96      0.66  19   0.0046 0.0495
## d.f.a10_recomendaria      0.95      0.95    0.96      0.65  19   0.0046 0.0480
## d.f.a11_prefiro           0.95      0.95    0.96      0.66  19   0.0045 0.0496
##                      med.r
## d.f.a1_reputacao      0.75
## d.f.a2_cara           0.76
## d.f.a3_prestigio      0.75
## d.f.a4_qualidade      0.76
## d.f.a5_gosto          0.75
## d.f.a6_melhor         0.75
## d.f.a7_admiro         0.75
## d.f.a8_simpatia       0.75
## d.f.a9_compraria      0.75
## d.f.a10_recomendaria  0.75
## d.f.a11_prefiro       0.75
## 
##  Item statistics 
##                        n raw.r std.r r.cor r.drop mean  sd
## d.f.a1_reputacao     199  0.90  0.90  0.89   0.87  2.4 1.4
## d.f.a2_cara          199  0.33  0.36  0.26   0.25  2.6 1.0
## d.f.a3_prestigio     199  0.88  0.88  0.87   0.85  2.2 1.2
## d.f.a4_qualidade     199  0.84  0.85  0.83   0.81  2.2 1.1
## d.f.a5_gosto         199  0.90  0.90  0.89   0.88  2.4 1.2
## d.f.a6_melhor        199  0.87  0.87  0.86   0.84  2.1 1.2
## d.f.a7_admiro        199  0.89  0.88  0.88   0.86  2.2 1.3
## d.f.a8_simpatia      199  0.90  0.90  0.89   0.88  2.4 1.4
## d.f.a9_compraria     199  0.89  0.89  0.88   0.86  2.3 1.3
## d.f.a10_recomendaria 199  0.90  0.89  0.89   0.87  2.2 1.3
## d.f.a11_prefiro      199  0.87  0.87  0.86   0.84  2.0 1.1
## 
## Non missing response frequency for each item
##                         1    2    3    4    5 miss
## d.f.a1_reputacao     0.37 0.18 0.20 0.17 0.09    0
## d.f.a2_cara          0.18 0.21 0.44 0.15 0.02    0
## d.f.a3_prestigio     0.39 0.22 0.21 0.16 0.02    0
## d.f.a4_qualidade     0.32 0.25 0.32 0.09 0.02    0
## d.f.a5_gosto         0.34 0.21 0.26 0.13 0.06    0
## d.f.a6_melhor        0.46 0.17 0.27 0.07 0.04    0
## d.f.a7_admiro        0.43 0.18 0.22 0.12 0.06    0
## d.f.a8_simpatia      0.39 0.15 0.18 0.17 0.11    0
## d.f.a9_compraria     0.41 0.16 0.24 0.14 0.05    0
## d.f.a10_recomendaria 0.44 0.19 0.21 0.11 0.06    0
## d.f.a11_prefiro      0.50 0.17 0.23 0.08 0.03    0
psych::alpha(d.f$human.df)
## 
## Reliability analysis   
## Call: psych::alpha(x = d.f$human.df)
## 
##   raw_alpha std.alpha G6(smc) average_r S/N    ase mean  sd median_r
##       0.96      0.95    0.96       0.7  21 0.0043  2.7 1.3     0.72
## 
##  lower alpha upper     95% confidence boundaries
## 0.95 0.96 0.96 
## 
##  Reliability if an item is dropped:
##                      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r
## d.f.h1_homens             0.96      0.96    0.96      0.75  23   0.0041 0.013
## d.f.h2_humanas            0.95      0.95    0.95      0.69  18   0.0052 0.019
## d.f.h3_amigos             0.95      0.95    0.95      0.68  17   0.0055 0.015
## d.f.h4_personalidade      0.95      0.95    0.96      0.71  19   0.0047 0.022
## d.f.h5_atraente           0.96      0.96    0.96      0.74  23   0.0041 0.016
## d.f.h6_medo               0.95      0.95    0.95      0.69  18   0.0052 0.015
## d.f.h7_emocional          0.95      0.95    0.95      0.69  18   0.0052 0.020
## d.f.h8_aberta             0.95      0.95    0.95      0.68  17   0.0054 0.015
## d.f.h9_etica              0.95      0.95    0.95      0.70  18   0.0050 0.020
##                      med.r
## d.f.h1_homens         0.77
## d.f.h2_humanas        0.67
## d.f.h3_amigos         0.67
## d.f.h4_personalidade  0.76
## d.f.h5_atraente       0.77
## d.f.h6_medo           0.69
## d.f.h7_emocional      0.67
## d.f.h8_aberta         0.67
## d.f.h9_etica          0.70
## 
##  Item statistics 
##                        n raw.r std.r r.cor r.drop mean  sd
## d.f.h1_homens        199  0.68  0.70  0.64   0.62  2.6 1.2
## d.f.h2_humanas       199  0.91  0.91  0.91   0.89  2.7 1.5
## d.f.h3_amigos        199  0.94  0.93  0.93   0.92  2.7 1.7
## d.f.h4_personalidade 199  0.83  0.84  0.81   0.79  2.7 1.4
## d.f.h5_atraente      199  0.71  0.72  0.67   0.65  2.6 1.3
## d.f.h6_medo          199  0.91  0.90  0.90   0.88  2.9 1.8
## d.f.h7_emocional     199  0.91  0.91  0.90   0.88  2.8 1.5
## d.f.h8_aberta        199  0.93  0.92  0.93   0.91  2.9 1.7
## d.f.h9_etica         199  0.88  0.88  0.87   0.85  2.6 1.4
## 
## Non missing response frequency for each item
##                         1    2    3    4    5 miss
## d.f.h1_homens        0.27 0.18 0.35 0.13 0.08    0
## d.f.h2_humanas       0.38 0.11 0.17 0.17 0.18    0
## d.f.h3_amigos        0.44 0.04 0.12 0.15 0.25    0
## d.f.h4_personalidade 0.27 0.19 0.20 0.21 0.14    0
## d.f.h5_atraente      0.28 0.16 0.29 0.19 0.09    0
## d.f.h6_medo          0.40 0.08 0.05 0.14 0.34    0
## d.f.h7_emocional     0.34 0.13 0.15 0.20 0.19    0
## d.f.h8_aberta        0.41 0.08 0.05 0.17 0.30    0
## d.f.h9_etica         0.34 0.13 0.27 0.16 0.10    0

Vamos inspecionar as médias de atitude e médias de “humanização” da marca por condição. Mas antes disso, quantos casos temos por condição mesmo?

table(d.f$condicao)
## 
## CondControle   CondHumana 
##           98          101
#fazendo mais "bonito"

d.f$condicoes <- factor(d.f$condicao, levels = c("CondControle", "CondHumana"), 
                       labels = c("Controle", "Humanizada"))
t.condicao <- freq(d.f$condicoes, digits = 2, exclude = NA, total = T)
kable(t.condicao, caption = "Respondentes por Condição")
Respondentes por Condição
n %
Controle 98 49.25
Humanizada 101 50.75
Total 199 100.00

Mais ou menos equilibradas as condições. Agora vamos ver como as variáveis de interesse se distribuem por condições. Para isso, eu vou usar a função “describeBy”, do pacote psych.

desc.atitude <- describeBy(d.f$atitude,d.f$condicoes, mat = T, digits = 2)
names(desc.atitude)[2] <- "Condições"
row.names(desc.atitude)<-NULL
desc.human <- describeBy(d.f$human,d.f$condicoes, mat = T, digits = 2)
names(desc.human)[2] <- "Condições"
row.names(desc.human)<-NULL

desc.atitude
##   item  Condições vars   n mean   sd median trimmed  mad min  max range  skew
## 1    1   Controle    1  98 1.62 0.65   1.36    1.53 0.40   1 3.73  2.73  1.32
## 2    2 Humanizada    1 101 2.89 0.93   3.09    2.91 1.08   1 4.82  3.82 -0.23
##   kurtosis   se
## 1     1.21 0.07
## 2    -0.73 0.09
desc.human
##   item  Condições vars   n mean   sd median trimmed  mad min  max range  skew
## 1    1   Controle    1  98 1.64 0.70   1.44    1.52 0.66   1 4.11  3.11  1.60
## 2    2 Humanizada    1 101 3.78 0.81   3.89    3.83 0.82   1 5.00  4.00 -0.73
##   kurtosis   se
## 1     2.61 0.07
## 2     0.47 0.08
kable(desc.atitude[,c(2,4:6)], caption = "Médias de Atitude por Condição Experimental")
Médias de Atitude por Condição Experimental
Condições n mean sd
Controle 98 1.62 0.65
Humanizada 101 2.89 0.93
kable(desc.human[,c(2,4:6)], caption = "Médias de Humanização por Condição Experimental")
Médias de Humanização por Condição Experimental
Condições n mean sd
Controle 98 1.64 0.70
Humanizada 101 3.78 0.81

Podemos, também, fazer gráficos, mas as informações são redundantes.

ggplot(desc.atitude, aes(x=`Condições`, y=mean))+
  geom_bar(stat = "identity", width = 0.5, fill = "lightblue")+
  geom_errorbar(aes(ymax = mean + (1.96*se), ymin=mean - (1.96*se)), 
                position=position_dodge(width=0.9), width=0.25)+
  coord_cartesian(ylim = c(1, 5))+
  labs(title="Atitude em Relação à Marca por Condição Experimental", 
       y="Atitude Média", x="Condições")

ggplot(desc.human, aes(x=`Condições`, y=mean))+
  geom_bar(stat = "identity", width = 0.5, fill = "pink")+
  geom_errorbar(aes(ymax = mean + (1.96*se), ymin=mean - (1.96*se)), 
                position=position_dodge(width=0.9), width=0.25)+
  coord_cartesian(ylim = c(1, 5))+
  labs(title="Humanização da Marca por Condição Experimental", 
       y="Humanização Média", x="Condições")