A Auditoria de Segurança Viária (ASV) é um procedimento de natureza proativa com grande potencial na melhoria das condições de segurança de ambiente viários urbanos e rurais. A ASV consiste em um exame formal de desempenho de segurança viária de projetos viários desenvolvido por uma equipe independente, qualificada e multidisciplinar (AUSTROADS,2009; DOT, 2014). Quando realizado em vias já existentes este procedimento é denominado de Inspeção de Segurança Viária (ISV) ou Revisão de Segurança Viária (RSV). A realização de Inspeções de Segurança Viária é tradicionalmente realizada por meio de visitas ao local de interesse onde são inspecionadas as condições de segurança de uma série de elementos viário-ambientais previamente definidos. No entanto, a atividade de ISV realizada em campo, embora efetiva para a identificação das condições dos elementos avaliados, apresenta certas limitações. Entre elas destacam-se: (i) exposição dos avaliadores ao risco de acidentes viários durante as atividades de inspeção; (ii) necessidade de múltiplas visitas para contemplar diferentes condições climáticas e de luminosidade; e (iii) custos associados a deslocamento de equipes para realização da inspeção in loco.
Como alternativa para superar essas limitações, são crescentes as iniciativas que propõem e avaliam métodos de inspeção remota que fazem uso da disponibilidade de recursos de imagem das vias em ferramentas como o Street View (Badland et al., 2010; Kelly et al.,2013; Lee e Talen, 2014; Bader et al.,2017). Embora haja um crescente uso de imagens nas ISVs, ele é limitado em termos de visualização e análise de objetos físicos, os quais precisam ser interpretados com informações sensoriais, como forma, textura, tamanho e relações espaciais como elevação, volume e altura (Yin & Shiode, 2014). Algumas iniciativas recentes de ISV remota tem adotado dispositivos de realidade virtual que simulam a experiência de imersão propiciando uma visão do ambiente inspecionado em 3 dimensões. Acredita-se que as ISVs remotas em realidade virtual ofereçam melhores condições de avaliação das reais condições dos elementos avaliados do que quando as inspeções realizadas em ferramentas de imagem comuns.
Os simuladores de direção têm o potencial de identificar problemas de projeto de rodovias, explicar a interação entre motoristas e os arredores da rodovia e, o mais importante, explorar contramedidas eficazes para melhorar a qualidade da segurança e operação do tráfego (Yan et al., 2008).
Os resultados da pesquisa mostram que o experimento do simulador de condução em realidade virtual pode ser utilizado como uma ferramenta válida para identificar problemas de segurança no trânsito para cruzamentos sinalizados, a fim de buscar contramedidas de engenharia para reduzir as taxas de colisão nos locais de alto risco (Yan et al., 2008).
As principais vantagens da auditoria de vias urbanas virtualmente surgem da capacidade do pesquisador de acessar locais remotamente. Os custos relacionados à pesquisa, como tempo de transporte e quilometragem, são substancialmente mais baixos do que na realização de auditorias físicas (Badland et al., 2010).
Essas descobertas demonstraram que o Google Street View era, em grande parte, uma ferramenta eficiente e eficaz para medir o contexto da paisagem urbana nas vizinhanças. Adquirida a familiaridade com o software Google Street View, as auditorias virtuais foram mais rápidas de administrar quando comparadas às avaliações físicas das vias. Além disso, níveis aceitáveis de concordância foram demonstrados para a maioria dos elementos testados (Badland et al., 2010).
Uma vez definidas as duplas de avaliadores a utilizarem os métodos de ASV local e virtual, foram definidos os elementos de avaliação e seus critérios. Para verificar a concordância intra e entre duplas foi utilizado o coeficiente capa dado pela função:
\[ K = \frac{\Pi_0 - \Pi_e}{1-\Pi_e} \]
Onde \(\Pi_0 = \sum_{1}^{s} \rho_{ii}\), fornece a probabilidade de concordância entre avaliadores, para p_ii como a probabilidade de um item ser classificada na mesma categoria i^ por ambos avaliadores. Da mesma forma \(\Pi_e = \sum_{1}^{s} (\rho_{i+}) (\rho_{+i})\) fornecendo a probabilidade d concordância dado que a hipótese nula e independência das classificações é satisfeita (Suely Ruiz Giolo, 2017). Quando \(\Pi_0 = 1\) o coeficiente capa indica perfeita concordância entre avaliadores, e quando igual a zero admite-se que a hipótese nula de não concordância entre avaliadores.
Dessa forma a o índice Kappa representa o grau de concordância, onde o índice 1 indica concordâncias perfeita, o índice 0 identifica concordância por mero acaso e quando menor que 0 indica concordância menor do que esperada por acaso (Clifton et al., 2007).
O nível de concordância entre avaliadores costuma ser dado pelos seguintes intervalos; [0,01-0,20] como concordância muito fraca, [0,21-0,40] fraca, [0,41-0,60] moderada, [0,61-080] substancial e [0,81-1,0] como excelente (Landis e Koch, 1977).
Em estudo de ASV (Pikora et al., 2002) ao utilizar o índice Kappa considerou índices superiores 0.75 como representativos de alto índice de concordância, entre 40 e 75 concordância moderada e abaixo de 40 como baixa concordância. Em auditoria de caminhabilidade na Escócia, 112 itens de 30 seções foram avaliadas por três pares de avaliadores, nesse estudo o índice Kappa foi utilizado para avaliar o grau de concordância intra pares e entre pares, utilizando como intervalos valores maiores que 0.7 para alto índice de concordância, entre 0.4 e 0.7 como boa concordância e abaixo de 0.4 como baixo índice de concordância (Millington et al., 2009). A fim de avaliar a concordância entre avaliadores utilizando vistorias locais, por meio do Google Street View e arquivos GIS (Lee e Talen, 2014) utilizaram o índice Kappa para mensuração da concordância entre avaliadores para identificar se a concordância ocorreu por acaso ou não.
( ) Realidade Virtual
( ) In Loco
( ) Sem Obstrução
( ) Obstrução em um acesso
( ) Obstrução em dois acessos
( ) Obstrução em três ou mais acessos
( ) Sem delineamento e sem complexidade
( ) Com delineamento e sem complexidade
( ) Com delineamento e com complexidade
( ) Sem delineamento e com complexidade
( ) Canteiro inexistente e não necessário
( ) Presente e seguro
( ) Presente e inseguro
( ) Sem canteiro e necessário
( ) Todos atendidos
( ) Atende pelo menos 2 itens
( ) Atende pelo menos 1 item
( ) Não atende nenhum item
( ) íntegro / Uniforme
( ) Irregularidade baixa (desconforto)
( ) Irregularidade acentuada(exige redução de velocidade)
( ) Danificado / Buracos (requer cuidado)
( ) Nova
( ) Sinais do tempo
( ) Incompleta
( ) Inexistente
( ) Existe e com visibilidade total
( ) Existente e mal posicionada
( ) Existente com obstrução
( ) Inexistente
( ) Clara / Ausente sem prejuízos
( ) Insuficiente
( ) Contraditória / Confusa
( ) Inexistente porém necessária
( ) Semaforização pedestres/veículos
( ) Semaforização veicular
( ) Sinalização Vertical (somente placas)
( ) Inexistente
( ) Ciclovia - Via segregada dos demais veículos por elevação e/ou barreira física
( ) Ciclofaixa - Separação com tachões e sinalização horizontal
( ) Compartilhado - Sinalização horizontal na pista quanto ao tráfego de bicicletas
( ) Inexistente - Via sem qualquer indicação quanto ao tráfego de bicicletas
( ) Faixa elevada / Faixa não necessária
( ) Faixa com avanço de calçada
( ) Faixa simples
( ) Inexistente porém necessária
( ) Não há semáforo
( ) Bem posicionado e visível
( ) Mal posicionado
( ) Obstruído
( ) Residencial
( ) Industrial / Rural
( ) Comercial
( ) Múltiplos Usos
( ) Local
( ) Coletora
( ) Arterial
( ) Rodovia Urbana
library(xlsx)
library(DT)
library(dplyr)
library(irr)
Yan = read.xlsx2(file = "Cópia de Inspeção Viária (Responses).xlsx", sheetIndex = 2, header = F)
Yan = Yan[ ,3:19]
names(Yan) = c("Avaliador", "Tipo Avaliação", "Indice", "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10", "Item 11", "Item 12", "Item 13", "Item 14")
DT::datatable(Yan[ ,4:10], filter = 'top', options = list(
language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Portuguese.json'),
pageLength = 5, autoWidth = TRUE
))
Marcos = read.xlsx2(file = "Cópia de Inspeção Viária (Responses).xlsx", sheetIndex = 3, header = F)
Marcos = Marcos[ ,3:19]
names(Marcos) = c("Avaliador", "Tipo Avaliação", "Indice", "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10", "Item 11", "Item 12", "Item 13", "Item 14")
DT::datatable(Marcos[ ,4:10], filter = 'top', options = list(
language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Portuguese.json'),
pageLength = 5, autoWidth = TRUE
))
Giovana = read.xlsx2(file = "Cópia de Inspeção Viária (Responses).xlsx", sheetIndex = 4, header = F)
Giovana = Giovana[ ,3:19]
names(Giovana) = c("Avaliador", "Tipo Avaliação", "Indice", "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10", "Item 11", "Item 12", "Item 13", "Item 14")
DT::datatable(Giovana[ ,4:10], filter = 'top', options = list(
language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Portuguese.json'),
pageLength = 5, autoWidth = TRUE
))
Gabriel = read.xlsx2(file = "Cópia de Inspeção Viária (Responses).xlsx", sheetIndex = 5, header = F)
Gabriel = Gabriel[ ,3:19]
names(Gabriel) = c("Avaliador", "Tipo Avaliação", "Indice", "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10", "Item 11", "Item 12", "Item 13", "Item 14")
DT::datatable(Gabriel[ ,4:10], filter = 'top', options = list(
language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Portuguese.json'),
pageLength = 5, autoWidth = TRUE
))
Barbara = read.xlsx2(file = "Cópia de Inspeção Viária (Responses).xlsx", sheetIndex = 6, header = F)
Barbara = Barbara[ ,3:19]
names(Barbara) = c("Avaliador", "Tipo Avaliação", "Indice", "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10", "Item 11", "Item 12", "Item 13", "Item 14")
DT::datatable(Barbara[ ,4:10], filter = 'top', options = list(
language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Portuguese.json'),
pageLength = 5, autoWidth = TRUE
))
Fagner = read.xlsx2(file = "Cópia de Inspeção Viária (Responses).xlsx", sheetIndex = 7, header = F)
Fagner = Fagner[ ,3:19]
names(Fagner) = c("Avaliador", "Tipo Avaliação", "Indice", "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10", "Item 11", "Item 12", "Item 13", "Item 14")
DT::datatable(Fagner[ ,4:10], filter = 'top', options = list(
language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Portuguese.json'),
pageLength = 5, autoWidth = TRUE
))
Yan = c(as.character(Yan$`Item 1`), as.character(Yan$`Item 2`), as.character(Yan$`Item 3`), as.character(Yan$`Item 4`), as.character(Yan$`Item 5`), as.character(Yan$`Item 6`), as.character(Yan$`Item 7`), as.character(Yan$`Item 8`), as.character(Yan$`Item 9`), as.character(Yan$`Item 10`), as.character(Yan$`Item 11`), as.character(Yan$`Item 12`), as.character(Yan$`Item 13`), as.character(Yan$`Item 14`))
Barbara = c(as.character(Barbara$`Item 1`), as.character(Barbara$`Item 2`), as.character(Barbara$`Item 3`), as.character(Barbara$`Item 4`), as.character(Barbara$`Item 5`), as.character(Barbara$`Item 6`), as.character(Barbara$`Item 7`), as.character(Barbara$`Item 8`), as.character(Barbara$`Item 9`), as.character(Barbara$`Item 10`), as.character(Barbara$`Item 11`), as.character(Barbara$`Item 12`), as.character(Barbara$`Item 13`), as.character(Barbara$`Item 14`))
Marcos = c(as.character(Marcos$`Item 1`), as.character(Marcos$`Item 2`), as.character(Marcos$`Item 3`), as.character(Marcos$`Item 4`), as.character(Marcos$`Item 5`), as.character(Marcos$`Item 6`), as.character(Marcos$`Item 7`), as.character(Marcos$`Item 8`), as.character(Marcos$`Item 9`), as.character(Marcos$`Item 10`), as.character(Marcos$`Item 11`), as.character(Marcos$`Item 12`), as.character(Marcos$`Item 13`), as.character(Marcos$`Item 14`))
Gabriel = c(as.character(Gabriel$`Item 1`), as.character(Gabriel$`Item 2`), as.character(Gabriel$`Item 3`), as.character(Gabriel$`Item 4`), as.character(Gabriel$`Item 5`), as.character(Gabriel$`Item 6`), as.character(Gabriel$`Item 7`), as.character(Gabriel$`Item 8`), as.character(Gabriel$`Item 9`), as.character(Gabriel$`Item 10`), as.character(Gabriel$`Item 11`), as.character(Gabriel$`Item 12`), as.character(Gabriel$`Item 13`), as.character(Gabriel$`Item 14`))
Giovana = c(as.character(Giovana$`Item 1`), as.character(Giovana$`Item 2`), as.character(Giovana$`Item 3`), as.character(Giovana$`Item 4`), as.character(Giovana$`Item 5`), as.character(Giovana$`Item 6`), as.character(Giovana$`Item 7`), as.character(Giovana$`Item 8`), as.character(Giovana$`Item 9`), as.character(Giovana$`Item 10`), as.character(Giovana$`Item 11`), as.character(Giovana$`Item 12`), as.character(Giovana$`Item 13`), as.character(Giovana$`Item 14`))
Fagner = c(as.character(Fagner$`Item 1`), as.character(Fagner$`Item 2`), as.character(Fagner$`Item 3`), as.character(Fagner$`Item 4`), as.character(Fagner$`Item 5`), as.character(Fagner$`Item 6`), as.character(Fagner$`Item 7`), as.character(Fagner$`Item 8`), as.character(Fagner$`Item 9`), as.character(Fagner$`Item 10`), as.character(Fagner$`Item 11`), as.character(Fagner$`Item 12`), as.character(Fagner$`Item 13`), as.character(Fagner$`Item 14`))
df = as.data.frame(cbind(Yan, Barbara, Gabriel, Fagner, Marcos, Giovana))
kappam.fleiss(df[,c("Yan","Barbara","Gabriel")], exact=TRUE)
## Fleiss' Kappa for m Raters (exact value)
##
## Subjects = 420
## Raters = 3
## Kappa = 0.642
resvirtual = kappam.fleiss(df[,c("Yan","Barbara","Gabriel")], exact=TRUE)[5]
kappam.fleiss(df[,c("Giovana","Marcos","Fagner")], exact=TRUE)
## Fleiss' Kappa for m Raters (exact value)
##
## Subjects = 420
## Raters = 3
## Kappa = 0.619
reslocal = kappam.fleiss(df[,c("Giovana","Marcos","Fagner")], exact=TRUE)[5]
kappam.fleiss(df[,c("Yan","Barbara","Gabriel", "Giovana","Marcos","Fagner")], exact=TRUE)
## Fleiss' Kappa for m Raters (exact value)
##
## Subjects = 420
## Raters = 6
## Kappa = 0.603
restotal = kappam.fleiss(df[,c("Yan","Barbara","Gabriel", "Giovana","Marcos","Fagner")], exact=TRUE)[5]
universo = df[,c("Yan","Barbara","Gabriel", "Giovana","Marcos","Fagner")]
Yan = read.xlsx2(file = "Cópia de Inspeção Viária (Responses).xlsx", sheetIndex = 2, header = F)
Yan = Yan[ ,3:19]
names(Yan) = c("Avaliador", "Tipo Avaliação", "Indice", "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10", "Item 11", "Item 12", "Item 13", "Item 14")
Marcos = read.xlsx2(file = "Cópia de Inspeção Viária (Responses).xlsx", sheetIndex = 3, header = F)
Marcos = Marcos[ ,3:19]
names(Marcos) = c("Avaliador", "Tipo Avaliação", "Indice", "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10", "Item 11", "Item 12", "Item 13", "Item 14")
Giovana = read.xlsx2(file = "Cópia de Inspeção Viária (Responses).xlsx", sheetIndex = 4, header = F)
Giovana = Giovana[ ,3:19]
names(Giovana) = c("Avaliador", "Tipo Avaliação", "Indice", "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10", "Item 11", "Item 12", "Item 13", "Item 14")
Gabriel = read.xlsx2(file = "Cópia de Inspeção Viária (Responses).xlsx", sheetIndex = 5, header = F)
Gabriel = Gabriel[ ,3:19]
names(Gabriel) = c("Avaliador", "Tipo Avaliação", "Indice", "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10", "Item 11", "Item 12", "Item 13", "Item 14")
Barbara = read.xlsx2(file = "Cópia de Inspeção Viária (Responses).xlsx", sheetIndex = 6, header = F)
Barbara = Barbara[ ,3:19]
names(Barbara) = c("Avaliador", "Tipo Avaliação", "Indice", "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10", "Item 11", "Item 12", "Item 13", "Item 14")
Fagner = read.xlsx2(file = "Cópia de Inspeção Viária (Responses).xlsx", sheetIndex = 7, header = F)
Fagner = Fagner[ ,3:19]
names(Fagner) = c("Avaliador", "Tipo Avaliação", "Indice", "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10", "Item 11", "Item 12", "Item 13", "Item 14")
dados = data.frame(matrix(vector(), 15, 4,
dimnames=list(c(), c("Item", "Virtual", "Local", "Geral"))),
stringsAsFactors=F)
for (i in 1:14) {
if (i == 1) {
df1 = cbind(as.character(Yan[, i+3]), as.character(Barbara[,i+3]), as.character(Gabriel[,i+3]))
df1
df2 = cbind(as.character(Fagner[, i+3]), as.character(Marcos[,i+3]), as.character(Giovana[,i+3]))
df2
df3 = cbind(as.character(Fagner[, i+3]), as.character(Marcos[,i+3]), as.character(Giovana[,i+3]), as.character(Yan[, i+3]), as.character(Barbara[,i+3]), as.character(Gabriel[,i+3]))
df3
dados$Item[i] = i
dados$Virtual[i] = as.numeric(kappam.fleiss(df1[ , 1:3], exact=TRUE)[5])
dados$Local[i] = as.numeric(kappam.fleiss(df2[ , 1:3], exact=TRUE)[5])
dados$Geral[i] = as.numeric(kappam.fleiss(df3[ , 1:6], exact=TRUE)[5])
}else{
df1 = cbind(as.character(Yan[, i+3]), as.character(Barbara[,i+3]), as.character(Gabriel[,i+3]))
df1
df2 = cbind(as.character(Fagner[, i+3]), as.character(Marcos[,i+3]), as.character(Giovana[,i+3]))
df2
df3 = cbind(as.character(Fagner[, i+3]), as.character(Marcos[,i+3]), as.character(Giovana[,i+3]), as.character(Yan[, i+3]), as.character(Barbara[,i+3]), as.character(Gabriel[,i+3]))
df3
dados$Item[i] = i
dados$Virtual[i] = as.numeric(kappam.fleiss(df1[ , 1:3], exact=TRUE)[5])
dados$Local[i] = as.numeric(kappam.fleiss(df2[ , 1:3], exact=TRUE)[5])
dados$Geral[i] = as.numeric(kappam.fleiss(df3[ , 1:6], exact=TRUE)[5])
}
}
dados$Virtual = round(dados$Virtual,3)
dados$Local = round(dados$Local,3)
dados$Geral = round(dados$Geral,3)
dados$Item[15] = "Geral"
dados$Virtual[15] = round(as.numeric(resvirtual),2)
dados$Local[15] = round(as.numeric(reslocal),2)
dados$Geral[15]= round(as.numeric(restotal),2)
dados$VirtualQuali = if_else(dados$Virtual < 0.20, "Muito Fraca", if_else(dados$Virtual < 0.4, "Fraca", ifelse(dados$Virtual < 0.6, "Moderada", if_else(dados$Virtual<0.8, "Substancial", "Excelente"))))
dados$LocalalQuali = if_else(dados$Local < 0.20, "Muito Fraca", if_else(dados$Local < 0.4, "Fraca", ifelse(dados$Local < 0.6, "Moderada", if_else(dados$Local<0.8, "Substancial", "Excelente"))))
dados$GeralQuali = if_else(dados$Geral < 0.20, "Muito Fraca", if_else(dados$Geral < 0.4, "Fraca", ifelse(dados$Geral < 0.6, "Moderada", if_else(dados$Geral<0.8, "Substancial", "Excelente"))))
DT::datatable(dados, filter = 'top', options = list(
language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Portuguese.json'),
pageLength = 15, autoWidth = TRUE
))
Badland, H. M., Opit, S., Witten, K., Kearns, R. A., e Mavoa, S. (2010) Can virtual streetscape audits reliably replace physical streetscape audits? Journal of Urban Health, 87(6), 1007–1016. doi:10.1007/s11524-010-9505-x
Clifton, K. J., Livi Smith, A. D., e Rodriguez, D. (2007) The development and testing of an audit for the pedestrian environment. Landscape and Urban Planning, 80(1–2), 95–110. doi:10.1016/j.landurbplan.2006.06.008
Landis, J. R., e Koch, G. G. (1977) The Measurement of Observer Agreement for Categorical Data. Biometrics, 33(1), 159. doi:10.2307/2529310
Lee, S., e Talen, E. (2014) Measuring Walkability: A Note on Auditing Methods. Journal of Urban Design. Routledge. doi:10.1080/13574809.2014.890040
Millington, C., Ward Thompson, C., Rowe, D., Aspinall, P., Fitzsimons, C., Nelson, N., e Mutrie, N. (2009) Development of the Scottish Walkability Assessment Tool (SWAT). Health and Place, 15(2), 474–481. doi:10.1016/j.healthplace.2008.09.007
Pikora, T. J., Bull, F. C. L., Jamrozik, K., Knuiman, M., Giles-Corti, B., e Donovan, R. J. (2002) Developing a reliable audit instrument to measure the physical environment for physical activity. American Journal of Preventive Medicine, 23(3), 187–194. doi:10.1016/S0749-3797(02)00498-1
Suely Ruiz Giolo. (2017) Introdução à Análise de Dados Categóricos com Aplicações. (1o ed). Blucher, São Paulo.
Yan, X., Abdel-Aty, M., Radwan, E., Wang, X., e Chilakapati, P. (2008) Validating a driving simulator using surrogate safety measures. Accident Analysis and Prevention, 40(1), 274–288. doi:10.1016/j.aap.2007.06.007