Você está na página 1de 20

appraiseR

Engenharia de Avaliações no R

Luiz F. P. Droubi* Norberto Hochheim†

1 Introdução

appraiseR é um pacote de software R que busca facilitar a prática da Engenharia de


Avaliações com a utilização de software livre, conforme as recomendações da NBR 14.653-02
(2011).
A confecção deste pacote também busca facilitar o ensino da Engenharia de Avalia-
ções, assim como da Ciência Estatística aos novos avaliadores, já que atualmente o ensino
normalmente depende da utilização de um software comercial, haja vista as dificuldades para
tratamento dos dados, ajuste de modelos e verificações das hipóteses básicas com a utilização
das planilhas eletrônicas comuns.
Foi escolhida a linguagem R devido à facilidade de programação nesta linguagem, à
disponibilidade de uma infinidade de métodos e testes estatísticos pré-programados e à dispo-
nibilidade de poderosas ferramentas gráficas dentro do ambiente R, seja através dos gráficos
do pacote básico, seja através dos gráficos gerados com os pacotes ggplot2 (WICKHAM, 2016)
e lattice (SARKAR, 2008).

2 Conjuntos de dados disponíveis

Foram disponibilizados alguns conjuntos de dados visando possibilitar a confecção de


testes dos algoritmos implementados, bem como a avaliação da possibilidade de aplicação de
novos métodos estatísticos na Engenharia de Avaliações. Foram acrescentados ainda dados
de novos trabalhos visando garantir a sua reprodutibilidade técnica.
Desta forma, procura-se acrescentar, sempre que possível, dados de trabalhos mais
novos produzidos pelo Grupo de Pesquisa em Engenharia de Avaliações e Perícias da UFSC
(GEAP/UFSC) no Programa de Pós-Graduação em Engenharia de Transportes e Gestão Ter-
ritorial (PPGTG) (ver ZILLI, 2020) assim como dados de trabalhos anteriores produzidos ainda
no Programa de Pós-Graduação em Engenharia Civil (TRIVELLONI, 2005).
* Engenheiro Civil e Cientista de Dados. Especialista em Auditoria, Avaliações e Perícias de Engenharia pelo
IPOG. É mestrando em Gestão Territorial pela Universidade Federal de Santa Catarina (UFSC). É pesquisador no
Grupo de Engenharia de Avaliações e Perícias (GEAP-UFSC), lfpdroubi@gmail.com

Professor Titular do Departamento de Engenharia Civil da Universidade Federal de Santa Catarina (UFSC), é
Engenheiro Civil e Mestre em Engenharia de Produção e Sistemas pela UFSC, Doutor pela Université de Nancy I
(França). Ministra/ministrou disciplinas em cursos de graduação, especialização, mestrado e doutorado, entre elas
Engenharia de Avaliações (nível básico e avançado), Planejamento Econômico e Financeiro e Planta de Valores
Genéricos, geap.ufsc@gmail.com

1
IX SIMPÓSIO DA SOCIEDADE BRASILEIRA DE ENGENHARIA DE AVALIAÇÕES

Quando disponíveis as coordenadas dos pontos, os dados são disponibilizados como


um objeto do tipo sf (simple features), do pacote sf (PEBESMA, 2018), o que visa facilitar a
confecção de mapas com os dados e análises geoespaciais.
Um destes é um conjunto de 50 dados de apartamentos em Florianópolis (HOCHHEIM,
2015), que será utilizado neste texto, fins de demonstrar o funcionamento do pacote.

dados <- centro_2015


dados <- within(dados, VU <- valor/area_total)

Como os dados estão geoespacializados é possível confeccionar um simples mapa com


o auxílio do pacote leaflet (CHENG et al., 2019), como pode ser visto na Figura 1, onde os
círculos tem tamanhos proporcionais aos valores unitários dos imóveis e cores representando
os padrões de acabamento de cada um (baixo padrão em vermelho, médio padrão em laranja
e alto padrão em amarelo).

library(leaflet)
dados <- st_transform(dados, 4326)
factpal <- colorFactor(heat.colors(3), dados$padrao)
m <- dados %>%
leaflet() %>%
addWMSTiles(baseUrl = "http://sigsc.sc.gov.br/sigserver/SIGSC/wms",
layers = list("OrtoRGB-Landsat-2012"))%>%
addCircleMarkers(radius = ~VU/1000, color = ~factpal(padrao))

Figura 1: Espacialização dos dados sobre ortofotos do Estado de Santa Catarina.

appraiseR: Engenharia de Avaliações no R 2 / 20


IX SIMPÓSIO DA SOCIEDADE BRASILEIRA DE ENGENHARIA DE AVALIAÇÕES

Os modelos podem ser ajustados com as variáveis qualitativas na forma de caracteres


ou fatores (situação em que o R automaticamente as transforma em variáveis dicotômicas em
grupo para o ajuste do modelo).
Por uma questão de compatibilidade com o exemplo disponível em Hochheim (2015),
no entanto, efetua-se a transformação da variável qualitativa padrao para o formato código
alocado (numérico):

dados <- within(dados, padrao <- as.numeric(padrao))

3 Análise exploratória de dados

Em relação à análise exploratória de dados, a NBR 14.653-2 (2011) recomenda, em


seu item A.2.1.1:

Recomenda-se ser analisado, primeiramente, o comportamento gráfico da variável


dependente em relação a cada variável independente, em escala original. Isto pode
orientar o avaliador na transformação a adotar.

plt <- plotdf(valor ~ area_total + quartos + suites + garagens +


dist_b_mar + padrao, data = dados)
print(plt)

Figura 2: Comportamento gráfico da variável dependente em relação a cada variável indepen-


dente, em escala original.

appraiseR: Engenharia de Avaliações no R 3 / 20


IX SIMPÓSIO DA SOCIEDADE BRASILEIRA DE ENGENHARIA DE AVALIAÇÕES

Neste mesmo item, a NBR 14.653-02 ainda recomenda que:

As transformações utilizadas para linearizar o modelo devem, tanto quanto possível,


refletir o comportamento do mercado, com preferência pelas transformações mais
simples de variáveis, que resultem em modelo satisfatório. Após as transformações
realizadas, se houver, examina-se a linearidade do modelo, pela construção de
gráficos dos valores observados para a variável dependente versus cada variável
independente, com as respectivas transformações.

plt1 <- plotdf(log(valor) ~ area_total + quartos + suites + garagens +


log(dist_b_mar) + I(1/padrao), data = dados)
print(plt1)

Figura 3: Comportamento gráfico da variável dependente em relação a cada variável indepen-


dente, com respectivas transformações.

4 Seleção de modelos

A seleção de modelos pode ser feita através da função bestfit, fornecendo-se uma
fórmula com as variáveis desejadas, sem qualquer transformação (o algoritmo se encarrega de
testar as transformações). As transformações a serem testadas são fornecidas pelo argumento
transf. Também é possível remover outliers e/ou pontos influenciantes através do argumento
subset. Dados amostrais com alguma informação faltante serão automaticamente removidos.

appraiseR: Engenharia de Avaliações no R 4 / 20


IX SIMPÓSIO DA SOCIEDADE BRASILEIRA DE ENGENHARIA DE AVALIAÇÕES

Em alguns conjuntos de dados, como este em análise, os dados para os bens-


avaliandos são incluídos no próprio conjunto de dados, sem a informação de valor. Estes
dados, portanto, não são utilizados na confecção do modelo.

best_fits <- bestfit(valor~area_total + quartos + suites + garagens +


dist_b_mar + padrao, data = dados,
transf = c("rec", "rsqrt", "log", "sqrt"),
subset = -c(31, 39))

O pacote gera um objeto da classe bestfit.

class(best_fits)

## [1] "bestfit"

Uma vez feitas as combinações de transformações, elas podem ser vistas no console
2
do R, ordenadas pelo critério do maior 𝑅𝑎𝑗𝑢𝑠𝑡𝑎𝑑𝑜 :

print(best_fits)

## Call:
## bestfit(formula = valor ~ area_total + quartos + suites + garagens +
## dist_b_mar + padrao, data = dados, subset = -c(31, 39), transf = c("rec",
## "rsqrt", "log", "sqrt"))
##
## Best 10 fits:
## id valor area_total quartos suites garagens dist_b_mar padrao adj_R2
## 5593 1 rsqrt sqrt rsqrt identity sqrt rsqrt rec 0.9571809
## 5588 2 rsqrt sqrt rsqrt identity sqrt rec rec 0.9571217
## 11843 3 rsqrt sqrt rsqrt sqrt sqrt rsqrt rec 0.9571084
## 5218 4 rsqrt log rsqrt identity sqrt rsqrt rec 0.9570525
## 5568 5 rsqrt sqrt rec identity sqrt rsqrt rec 0.9569846
## 11838 6 rsqrt sqrt rsqrt sqrt sqrt rec rec 0.9569357
## 5563 7 rsqrt sqrt rec identity sqrt rec rec 0.9569192
## 11818 8 rsqrt sqrt rec sqrt sqrt rsqrt rec 0.9567659
## 5219 9 rsqrt log rsqrt identity sqrt rsqrt rsqrt 0.9566598
## 5193 10 rsqrt log rec identity sqrt rsqrt rec 0.9566553
## ...

Foi desenvolvido um método summary para os objetos da class bestfit, que, por pa-
drão, imprime no console um sumário do modelo mais ajustado:

summary(best_fits)

## Call:
## bestfit(formula = valor ~ area_total + quartos + suites + garagens +
## dist_b_mar + padrao, data = dados, subset = -c(31, 39), transf = c("rec",
## "rsqrt", "log", "sqrt"))

appraiseR: Engenharia de Avaliações no R 5 / 20


IX SIMPÓSIO DA SOCIEDADE BRASILEIRA DE ENGENHARIA DE AVALIAÇÕES

##
## Best (Chosen) Transformations:
## id valor area_total quartos suites garagens dist_b_mar padrao adj_R2
## 5593 1 rsqrt sqrt rsqrt identity sqrt rsqrt rec 0.9571809
##
## Best (Chosen) fit LM summary:
## Estimate Std. Error t value Pr(>|t|) signif
## (Intercept) 1.396969e-03 1.174218e-04 11.897014 7.0720e-15 ***
## sqrt(area_total) -2.247445e-05 4.941773e-06 -4.547851 4.7388e-05 ***
## rsqrt(quartos) 6.727862e-04 1.079289e-04 6.233604 2.0127e-07 ***
## identity(suites) -3.000932e-05 1.795598e-05 -1.671272 0.10228 **
## sqrt(garagens) -2.889276e-04 3.970770e-05 -7.276361 6.7302e-09 ***
## rsqrt(dist_b_mar) -2.863179e-03 4.625967e-04 -6.189362 2.3266e-07 ***
## rec(padrao) 3.829555e-04 6.231043e-05 6.145929 2.6824e-07 ***
## ---
## Signif. codes: 0 ‘***’ 0.10 ‘**’ 0.20 ‘*’ 0.30 ‘ ’ 1
## NBR-14.653-2 check:
## Number of market data used:
## [1] "n = 48 >= 42 --> Grau III"
## Max significance level allowed for each predictor:
## [1] "10% < t máximo = 10.23 % < 20% --> Grau II"
## Max significance level allowed for F-test:
## [1] "p-valor F = 1.22e-25 % < 1% --> Grau III"

Pode-se escolher, no entanto, qualquer modelo da lista, através da adição do argumento


fit, fornecendo o número do modelo desejado. No entanto, é sabido que pode não ser tarefa
fácil encontrar um modelo adequado em meio a tantas transformações1 .
Recomenda-se, portanto, tentar encontrar a transformação mais adequada para a va-
riável dependente através da análise do gráfico do perfil de log-verossimilhança das possíveis
transformações com a família de Box-Cox, como, aliás, já recomenda a própria NBR 14.653-02
(2011, p. A.2.1.1):

Existem formas estatísticas de se buscar a transformação mais adequada, como,


por exemplo, os procedimentos de Box e Cox.

No R, isto pode ser feito facilmente através da utilização da função boxCox do pacote
car (FOX; WEISBERG, 2019), como abaixo:

library(car)
fit <- lm(valor ~ area_total + quartos + suites + garagens + dist_b_mar + padrao,
data = dados)
s <- summary(fit)
boxCox(fit)
1
No RStudio, a maneira mais fácil de pesquisar os modelos é aplicar a função View à tabela de transformações.

appraiseR: Engenharia de Avaliações no R 6 / 20


IX SIMPÓSIO DA SOCIEDADE BRASILEIRA DE ENGENHARIA DE AVALIAÇÕES

Figura 4: Perfil da Log-Verossimilhança do parâmetro 𝜆 da família de Box-Cox

A partir da análise da Figura 4, pode-se restringir a busca aos modelos que utilizam a
transformação logarítmica à variável dependente, já que 𝜆 = 0 ([-0,1; 0,3] @95%).
A tabelas das transformações aplicadas a cada variável do modelo fica armazenada
sob o nome de tabs dentro do objeto.

names(best_fits)

## [1] "adj.R2" "tab" "call" "subset" "combinations"


## [6] "response" "predictors" "newdata"

Por exemplo, pode-se selecionar apenas os modelos cuja transformação da variável


resposta foi a transformação logaritmica.

options(digits = 3)
df <- best_fits$tab
logs <- df[which(df$valor == "log"), ]
head(logs)

## id valor area_total quartos suites garagens dist_b_mar padrao adj_R2


## 3869 130 log identity sqrt identity sqrt rsqrt rsqrt 0.953
## 3868 137 log identity sqrt identity sqrt rsqrt rec 0.953
## 3867 141 log identity sqrt identity sqrt rsqrt log 0.953
## 3768 151 log identity identity identity sqrt rsqrt rec 0.953
## 3863 152 log identity sqrt identity sqrt rec rec 0.953
## 3769 156 log identity identity identity sqrt rsqrt rsqrt 0.953

Pode-se, então, selecionar o sumário de um modelo diferente, através da escolha apro-


priada do id na tabela acima.

appraiseR: Engenharia de Avaliações no R 7 / 20


IX SIMPÓSIO DA SOCIEDADE BRASILEIRA DE ENGENHARIA DE AVALIAÇÕES

summary(best_fits, fit = 514)

## Call:
## bestfit(formula = valor ~ area_total + quartos + suites + garagens +
## dist_b_mar + padrao, data = dados, subset = -c(31, 39), transf = c("rec",
## "rsqrt", "log", "sqrt"))
##
## Best (Chosen) Transformations:
## id valor area_total quartos suites garagens dist_b_mar padrao adj_R2
## 633 514 log identity identity identity identity log rec 0.95
##
## Best (Chosen) fit LM summary:
## Estimate Std. Error t value Pr(>|t|) signif
## (Intercept) 13.56386 0.230495 58.85 <2e-16 ***
## identity(area_total) 0.00147 0.000288 5.11 8e-06 ***
## identity(quartos) 0.16357 0.035356 4.63 4e-05 ***
## identity(suites) 0.06096 0.033686 1.81 0.08 ***
## identity(garagens) 0.20873 0.033416 6.25 2e-07 ***
## log(dist_b_mar) -0.14072 0.027197 -5.17 6e-06 ***
## rec(padrao) -0.56284 0.105001 -5.36 3e-06 ***
## ---
## Signif. codes: 0 ‘***’ 0.10 ‘**’ 0.20 ‘*’ 0.30 ‘ ’ 1
## NBR-14.653-2 check:
## Number of market data used:
## [1] "n = 48 >= 42 --> Grau III"
## Max significance level allowed for each predictor:
## [1] "t máximo = 7.77 % < 10% --> Grau III"
## Max significance level allowed for F-test:
## [1] "p-valor F = 3.25e-24 % < 1% --> Grau III"

5 Diagnósticos

Uma das vantagens de utilizar o R é que existem diversos pacotes com funções dispo-
níveis para elaborar uma série de diagnósticos sobre os modelos de avaliação ajustados.
Abaixo ilustramos alguns testes de normalidade previstos pela NBR 14.653-02:

# Modelo adotado (514)


fit <- summary(best_fits, fit = 514)$fit

5.1 Normalidade

Existem diversos pacotes com funções para a verificação da normalidade, dentre os


quais destacam-se os pacotes nortest (GROSS; LIGGES, 2015) e normtest. (GAVRILOV;
PUSEV, 2014)

appraiseR: Engenharia de Avaliações no R 8 / 20


IX SIMPÓSIO DA SOCIEDADE BRASILEIRA DE ENGENHARIA DE AVALIAÇÕES

library(nortest)
library(normtest)

a. Teste do 𝜒2 :

pearson.test(resid(fit))

##
## Pearson chi-square normality test
##
## data: resid(fit)
## P = 5, p-value = 0.7

b. Teste de Jarque-Bera:

jb.norm.test(resid(fit))

##
## Jarque-Bera test for normality
##
## data: resid(fit)
## JB = 0.7, p-value = 0.6

Alguns testes não previstos no texto normativo, porém de grande poder, também estão
disponíveis, como o teste de Shapiro-Wilk (RAZALI; WAH, 2011).

c. Shapiro-Wilk:

shapiro.test(resid(fit))

##
## Shapiro-Wilk normality test
##
## data: resid(fit)
## W = 1, p-value = 0.9

d. Teste K-S (Kolgomorov-Smirnov) (HARRIS, 2015)

KS(fit)

##
## One-sample Kolmogorov-Smirnov test
##
## data: rstandard(fit)
## D = 0.05, p-value = 1
## alternative hypothesis: two-sided

appraiseR: Engenharia de Avaliações no R 9 / 20


IX SIMPÓSIO DA SOCIEDADE BRASILEIRA DE ENGENHARIA DE AVALIAÇÕES

Figura 5: Curva da função de distribuição acumulada (FDA) empírica

e. Histograma

res <- data.frame(residuals = rstandard(fit))


ggplot(res, aes(residuals)) +
geom_histogram(aes(y = ..density..), bins = 6) +
stat_function(fun = dnorm,
args = list(mean = mean(res$residuals), sd = sd(res$residuals)),
lwd = 2, col = 'red')

Figura 6: Histograma dos resíduos padronizados

5.2 Homoscedasticidade

Também alguns testes de verificação da homoscedasticidade podem ser facilmente


aplicados, como o teste de Breusch-Pagan, através do pacote lmtest (ZEILEIS; HOTHORN,
2002):

library(lmtest)
bptest(fit)

appraiseR: Engenharia de Avaliações no R 10 / 20


IX SIMPÓSIO DA SOCIEDADE BRASILEIRA DE ENGENHARIA DE AVALIAÇÕES

##
## studentized Breusch-Pagan test
##
## data: fit
## BP = 6, df = 6, p-value = 0.4

A detecção da heteroscedasticidade, no entanto, pode ser difícil através da simples


aplicação de testes (ver ZONATO et al., 2020). A análise dos gráficos dos resíduos vs. valores
previstos é mais adequada na maioria das vezes. A linguagem R ainda é reconhecida pela alta
qualidade dos gráficos que podem ser produzidos com ela. Os gráficos padrão para diagnóstico
dos modelos de regressão linear, por exemplo, podem ser vistos na Figura 7 abaixo:

plot(fit, which = 1:6)

Figura 7: Diagnóstico do modelo de regressão adotado.

Além dos testes já existentes no R, procurou-se criar funções que auxiliem na verificação
da razoabilidade dos modelos ajustados, conforme solicita a NBR 14.653-02.
Além da verificação da homoscedasticidade, saliente-se, é possível2 também a utili-
zação do modelo com segurança através do emprego de erros robustos (ver ZONATO et al.,
2018), o que é possível no R, através do pacote sandwich (ZEILEIS).

5.3 Gráficos do modelo

É possíve elaborar gráficos do modelo através da função plotModel:

plotModel(best_fits, fit = 514)


2
A NBR 14.653-02 não trata desta possibilidade.

appraiseR: Engenharia de Avaliações no R 11 / 20


IX SIMPÓSIO DA SOCIEDADE BRASILEIRA DE ENGENHARIA DE AVALIAÇÕES

Figura 8: Gráficos do modelo com outras variáveis em seus valores medianos.

É possível adicionar intervalos de confiança (ou predição) e escolher o nível de confi-


ança desejado, como pode ser visto na Figura 9:

plotModel(best_fits, fit = 514, interval = "confidence", level = 0.80)

Figura 9: Gráficos do modelo com intervalos de predição (80%).

Para visualizar o comportamento do modelo no local de avaliação é preciso fornecer


o argumento local, onde são fornecidos os valores das características do bem-avaliando. O

appraiseR: Engenharia de Avaliações no R 12 / 20


IX SIMPÓSIO DA SOCIEDADE BRASILEIRA DE ENGENHARIA DE AVALIAÇÕES

resultado pode ser visto na Figura 10, em que o ponto vermelho representa o bem-avaliando,
com os intervalos de predição.
Juntamente aos gráficos obtidos, serão impressos no console os valores da elasticidade
do modelo no ponto de avaliação, em porcentagem. Estas porcentagens foram calculadas
considerando uma mudança de 10% em cada regressor.
Finalmente, é possível, ainda, acrescentar os limites superior e inferior do Campo de
Arbítrio do Avaliador, representado pelas linhas tracejadas na Figura 11, acompanhado ou não
do valor arbitrado para o bem-avaliando (em roxo). Note-se também que, para este gráfico,
optou-se pela plotagem de ambos os intervalos, de confiança e de predição, através do uso do
argumento interval = "both".

plotModel(best_fits, fit = 514, interval = "prediction", level = 0.80,


local = list(area_total = 205, quartos = 3, suites = 1, garagens = 2,
dist_b_mar = 250, padrao = 2))

## 0,22% 0,36% 0,044% 0,30% -0,097% 0,19%

Figura 10: Gráficos do modelo no ponto de previsão de valores.

plotModel(best_fits, fit = 514, interval = "both", level = 0.80, func = "log",


local = list(area_total = 205, quartos = 3, suites = 1, garagens = 2,
dist_b_mar = 250, padrao = 2), ca = TRUE, av = 1100000)

## 3,06% 5,03% 0,61% 4,26% -1,33% 2,59%

appraiseR: Engenharia de Avaliações no R 13 / 20


IX SIMPÓSIO DA SOCIEDADE BRASILEIRA DE ENGENHARIA DE AVALIAÇÕES

Figura 11: Gráficos do modelo no ponto de previsão de valores, acompanhado do valor arbi-
trado, ambos os intervalos e limites do Campo de Arbítrio.

Perceber que neste caso, como os gráficos foram plotados na escala original, as elasti-
cidades são maiores. Isto ocorre porque, no gráfico anterior, as elasticidades foram calculadas
na escala logarítmica, que é uma transformação não-linear. Deve-se atentar, portanto, para
este fato, haja vista que, em geral, os avaliadores devem estar preocupados com o comporta-
mento dos preços em sua escala original e não na sua escala transformada.

5.4 Poder de Predição

A função powerPlot ajusta o gráfico do poder de predição do modelo. Por padrão, a


2
função powerPlot ajusta o poder de predição do modelo de maior 𝑅𝑎𝑗𝑢𝑠𝑡𝑎𝑑𝑜 . Porém, como
em outras funções, é possível selecionar outros modelos da tabela. Na Figura 12 pode ser
visto o gráfico do Poder de Predição para o modelo escolhido.
Existe ainda um argumento que possibilita a inversão dos eixos do gráfico do poder de
predição, o que não vai ao encontro do que recomenda a NBR 14.653-02, porém é recomen-
dado pelos estatísticos, dado o fenômeno do encolhimento dos valores ajustados. Basta, para
isto, fornecer o argumento axis à função, o que resulta no gráfico da Figura 13 A3 .

powerPlot(best_fits, fit = 514)


3
Neste caso a diferença foi quase nula, mas em modelos com menor grau de ajuste é possível perceber a
diferença entre a escolha de plotar os valores ajustados nas abscissas ou nas ordenadas: a escolha de plotar os
valores ajustados nas ordenadas pode dar a falsa impressão de que o modelo é viesado (ver DROUBI, 2019).

appraiseR: Engenharia de Avaliações no R 14 / 20


IX SIMPÓSIO DA SOCIEDADE BRASILEIRA DE ENGENHARIA DE AVALIAÇÕES

Figura 12: Poder de Predição: modelo escolhido.

powerPlot(best_fits, fit = 514, axis = "inverted")

Uma última opção é o ajuste do gráfico do poder de predição na escala original, con-
forme Figura 13 B, uma vez que na escala transformada o modelo pode parecer razoável, mas
na escala original o resultado pode ficar bem aquém do esperado.

powerPlot(best_fits, fit = 514, func = "log", axis = "inverted")

Figura 13: Poder de Predição na escala transformada (A) e original (B).

appraiseR: Engenharia de Avaliações no R 15 / 20


IX SIMPÓSIO DA SOCIEDADE BRASILEIRA DE ENGENHARIA DE AVALIAÇÕES

5.5 Grau de precisão

As previsões podem ser feitas pela função predict aplicada ao método bestfit. Ao
imprimí-las no console, serão mostrados os limites do intervalo escolhido, do campo de arbítrio,
bem como a amplitude do intervalo e seu grau de precisão, segundo a NBR 14.653-02.
É possível fornecer parâmetros para a escolha das características dos imóveis a serem
previstos através do argumento newdata (não mostrado). Caso não sejam fornecidos novos
dados para ajuste, a função automaticamente irá procurar pelo(s) avaliando(s) no próprio con-
junto de dados utilizado para ajustar o modelo (dados cuja variável resposta não tenha valores).
Neste caso, três dados foram inclusos no conjunto, com as características descritas na tabela
1.
Tabela 1: Características dos avaliandos.

area_total quartos suites garagens dist_b_mar padrao


205 3 1 2 250 1
205 3 1 2 250 2
205 3 1 2 250 3

Além dos valores previstos e os limites do intervalo escolhido, são mostradas a ampli-
tude do intervalo, o grau de precisão, os limites do campo de arbítrio e os limites de valores
admissíveis (valores mais restritos entre o Campo de Arbítrio e os limites do intervalo esco-
lhido).

p <- predict(best_fits, fit = 514, interval = "confidence")


p

## Predictions:
## fit lwr upr AMP G.P. C.A.I. C.A.S. L.I. L.S.
## 51 725778 669022 787348 16.30 III 616911 834644 669022 787348
## 52 961661 924768 1000025 7.83 III 817412 1105910 924768 1000025
## 53 1056237 1011085 1103404 8.74 III 897801 1214672 1011085 1103404

p1 <- predict(best_fits, fit = 514, interval = "prediction")


p1

## Predictions:
## fit lwr upr AMP G.P. C.A.I. C.A.S. L.I. L.S.
## 51 725778 597151 882110 39.3 II 616911 834644 616911 834644
## 52 961661 802018 1153081 36.5 II 817412 1105910 817412 1105910
## 53 1056237 879978 1267799 36.7 II 897801 1214672 897801 1214672

5.6 Arbitragem de valores

Para arbitragem de valores, recomenda-se a utilização do pacote mosaic (PRUIM et


al., 2017), visando a produção de gráficos como o da Figura 14, onde as probabilidades de
ocorrência de valores dentro dos limites inferior e superior do intervalo de valores admissíveis
são calculadas.

appraiseR: Engenharia de Avaliações no R 16 / 20


IX SIMPÓSIO DA SOCIEDADE BRASILEIRA DE ENGENHARIA DE AVALIAÇÕES

new <- dados[51:53, ]


p <- exp(predict(fit, newdata = new, interval = "prediction", level = 0.80))
ca <- campo_arbitrio(p)

Na Figura 14, a área central corresponde à área delimitada pelos limites do intervalo de
valores admissíveis. No caso apresentado, o intervalo de valores admissíveis está limitado pelo
Campo de Arbítrio, que mostrou-se mais restrito do que o intervalo de predição. A probabilidade
de ocorrência de valores acima ou abaixo destes limites no mercado estudado é de 24,8% para
cada lado.

library(mosaic)
pl1 <-
xpnorm(c(max(ca[2, "C.A.I."], p[2, "lwr"]), min(ca[2, "C.A.S."], p[2, "upr"])),
mean = p[2, "fit"], sd = s$sigma,
return = "plot", system = "gg", digits=3) +
theme(legend.position="bottom") +
guides(fill=guide_legend(title="Prob."))
pl1

Figura 14: Distribuição de probabilidades dos preços dos imóveis no mercado, dadas as carac-
terísticas do bem-avaliando.

6 Parâmetros de outras normas técnicas

É possível, ainda, calcular os indicadores de performance da avaliação em massa, de


acordo com a International Association of Assessing Officers (IAAO, 2013), como a Mediana
das Razões de Avaliação, o Coeficiente de Dispersão da Mediana (COD) e o Diferencial Rela-
tivo do Preço (PRD):

appraiseR: Engenharia de Avaliações no R 17 / 20


IX SIMPÓSIO DA SOCIEDADE BRASILEIRA DE ENGENHARIA DE AVALIAÇÕES

library(broom)
dados <- augment(fit)
iaao_Ratio(exp(dados$.fitted), exp(dados$`log(valor)`))

## Razão das medianas (Median Ratio) = 1,009


## Nível: Valor Venal SUPERIOR ao valor de mercado:
## necessidade de atualização dos valores venais.
##
## COD (Coefficient of Dispersion) = 10,21%
## Nível: Equidade de Valor Venal BOA (COD entre 11% e 14%)
##
## PRD (Price-Related Differential) = 101,19%
## Nível: Tendência REGRESSIVA de Valor Venal
## DENTRO do intervalo recomendado (98% a 103%)

7 Conclusão

Como mostrado, a confecção de um pacote R pode servir a múltiplas finalidades, desde


a sua utilização para o ensino, como visando a reprodutibilidade técnica de análises presentes
em artigos e outros textos científicos, ou mesmo visando o auxílio na prática profissional aos
profissionais da área.
Obviamente que, por se tratar de software livre, o pacote descrito (appraiseR) não pro-
picia nenhuma garantia ao utilizador profissional, conforme a própria licença de utilização já
prevê.
O pacote atualmente encontra-se hospedado em repositório de software em que são
bem-vindas críticas, sugestões, contribuições e relatos de mal funcionamento (bugs).
Algumas funcionalidades não foram descritas neste artigo, por questões de limitação
de espaço. Mais informações sobre a utilização de outras funções podem ser encontradas no
site do pacote.

8 Desenvolvimento Futuro

O pacote continua em desenvolvimento contínuo. Pretende-se acrescentar funções


para facilitar o uso de outros métodos estatísticos na Engenharia de Avaliações, como os mo-
delos mistos, que são úteis para lidar com amostras heterogêneas, como na confecção de
plantas de valores genéricos e índices de preços.
Pretende-se ainda elaborar um manual do usuário com fins didáticos e uma espécie
de interface gráfica, como um painel de controle, que dispense a necessidade de digitação de
códigos em linhas de comando para a utilização do pacote.

9 Agradecimentos

Fica aqui um agradecimento aos colegas do Grupo de Pesquisa em Engenharia de


Avaliações e Perícias da UFSC (GEAP/UFSC), especialmente ao colega Carlos Zilli, pelo au-

appraiseR: Engenharia de Avaliações no R 18 / 20


IX SIMPÓSIO DA SOCIEDADE BRASILEIRA DE ENGENHARIA DE AVALIAÇÕES

xílio na revisão, além de um agradecimento especial ao colega Augusto Oliveira, da SEFIN do


município de Fortaleza, pela contribuição com a elaboração das funções para o cálculo dos
indicadores de performance segundo a IAAO e pela utilização e testes do pacote.

Referências

ABNT. NBR 14653-2: Avaliação de bens – parte 2: Imóveis urbanos. Rio de Janeiro:
Associação Brasileira de Normas Técnicas, 2011.
CHENG, J.; KARAMBELKAR, B.; XIE, Y. Leaflet: Create interactive web maps with
the javascript ’leaflet’ brary. 2019.
DROUBI, L. F. P. Porque deve-se plotar os valores ajustados no eixo das abscissas!
droubi.me, nov. 2019. Disponível em: <http://droubi.me/post/porque-deve-se-plotar-os-
valores-ajustados-no-eixo-das-abscissas/>. Acesso em: 25/10/2020.
FOX, J.; WEISBERG, S. An R companion to applied regression. Third ed. Thousand
Oaks CA: Sage, 2019.
GAVRILOV, I.; PUSEV, R. Normtest: Tests for normality. 2014.
GROSS, J.; LIGGES, U. Nortest: Tests for normality. 2015.
HARRIS, M. Kolmogorov-smirnov plot. Disponível em: <https://rpubs.com/mharris/
KSplot>. Acesso em: 7/2/2018.
HOCHHEIM, N. Engenharia de avaliações - módulo básico. Florianópolis: IBAPE -
SC, 2015.
IAAO. Standards on ratio studies. Kansas City, Missouri: International Association of
Assessing Officers, 2013.
PEBESMA, E. Simple Features for R: Standardized Support for Spatial Vector Data. The
R Journal, v. 10, n. 1, p. 439–446, 2018. Disponível em: <https://doi.org/10.32614/RJ-2018-
009>..
PRUIM, R.; KAPLAN, D. T.; HORTON, N. J. The mosaic package: Helping students
to ’think with data’ using r. The R Journal, v. 9, n. 1, p. 77–102, 2017. Disponível em:
<https://journal.r-project.org/archive/2017/RJ-2017-024/index.html>..
RAZALI, N.; WAH, Y. B. Power comparisons of Shapiro-Wilk, Kolmogorov-Smirnov, Lil-
liefors and Anderson-Darling tests. Journal of Statistical Modeling and Analytics, v. 2, p.
21–33, 2011.
SARKAR, D. Lattice: Multivariate data visualization with r. New York: Springer,
2008.
TRIVELLONI, C. A. P. Método para determinação do valor da localização com uso
de técnicas inferenciais e geoestatísticas na avaliação em massa de imóveis, 2005. Dou-
torado em Engenharia Civil, Centro Tecnológico da Universidade Federal de Santa Catarina.
WICKHAM, H. Ggplot2: Elegant graphics for data analysis. Springer-Verlag New
York, 2016.
ZEILEIS, A. Econometric computing with hc and hac covariance matrix esti-
mators. Journal of Statistical Software, v. 11, n. 10, p. 1–17. Disponível em:
<https://doi.org/10.18637/jss.v011.i10>..

appraiseR: Engenharia de Avaliações no R 19 / 20


IX SIMPÓSIO DA SOCIEDADE BRASILEIRA DE ENGENHARIA DE AVALIAÇÕES

ZEILEIS, A.; HOTHORN, T. Diagnostic checking in regression relationships. R News, v.


2, n. 3, p. 7–10, 2002. Disponível em: <https://CRAN.R-project.org/doc/Rnews/>..
ZILLI, C. A. Regressão geograficamente ponderada aplicada na avaliação em
massa de imóveis urbanos, 2020. Mestrado em Engenharia de Transportes e Gestão
Territorial, Centro Tecnológico da Universidade Federal de Santa Catarina.
ZONATO, W.; DROUBI, L. F. P.; HOCHHEIM, N. Pressupostos clássicos dos modelos
de regressão linear e suas implica ções sobre as avaliações em massa. In: 13º Congresso Bra-
sileiro de Cadastro Técnico Multifinalitário e Gestão Territorial. Anais…, 2018. Florianópolis:
COBRAC.
ZONATO, W.; DROUBI, L. F. P.; HOCHHEIM, N. DETECÇÃO de heterocedasticidade
em modelos econométricos para dados em corte: APLICAÇÃO de testes previstos na nbr
14653-2, testes não previstos e recomendações. Revista Avalia SPU, p. 118–129, 2020.
Brasília.

appraiseR: Engenharia de Avaliações no R 20 / 20

Você também pode gostar