Escolar Documentos
Profissional Documentos
Cultura Documentos
Engenharia de Avaliações no R
1 Introdução
1
IX SIMPÓSIO DA SOCIEDADE BRASILEIRA DE ENGENHARIA DE AVALIAÇÕES
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))
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.
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"))
##
## 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"
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.
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)
options(digits = 3)
df <- best_fits$tab
logs <- df[which(df$valor == "log"), ]
head(logs)
## 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:
5.1 Normalidade
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
KS(fit)
##
## One-sample Kolmogorov-Smirnov test
##
## data: rstandard(fit)
## D = 0.05, p-value = 1
## alternative hypothesis: two-sided
e. Histograma
5.2 Homoscedasticidade
library(lmtest)
bptest(fit)
##
## studentized Breusch-Pagan test
##
## data: fit
## BP = 6, df = 6, p-value = 0.4
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).
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".
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.
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.
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.
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).
## 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
## 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
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.
library(broom)
dados <- augment(fit)
iaao_Ratio(exp(dados$.fitted), exp(dados$`log(valor)`))
7 Conclusão
8 Desenvolvimento Futuro
9 Agradecimentos
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>..