Poder Calorífico Superior em função da Densidade Básica
Instalação do pacote e verificação se todos estão instalados. O Comando abaixo ajuda a verificar se os pacotes estão instalados, ou se necessitam ser instalados.
pacotes <- c("tidyverse", "readxl", "ggpubr", "kableExtra",
"PerformanceAnalytics", "scatterplot3d", "MASS",
"gridExtra", "car", "lmtest", "plyr", "knitr", "dplyr")
if(sum(as.numeric(!pacotes %in% installed.packages())) != 0){
instalador <- pacotes[!pacotes %in% installed.packages()]
for(i in 1:length(instalador)) {
install.packages(instalador, dependencies = T)
break()}
sapply(pacotes, require, character = T)
} else {
sapply(pacotes, require, character = T)
}## tidyverse readxl ggpubr
## TRUE TRUE TRUE
## kableExtra PerformanceAnalytics scatterplot3d
## TRUE TRUE TRUE
## MASS gridExtra car
## TRUE TRUE TRUE
## lmtest plyr knitr
## TRUE TRUE TRUE
## dplyr
## TRUE
A densidade básica se refere a quantidade de combustível seco (lenha) por unidade de volume saturado, sendo uma propriedade física importante na caracterização de um combustível a base de biomassa. O objetivo principal dessa modelagem é verificar se as Propriedades Energéticas do combustível (Poder Calorífico) tem correlação com a Densidade Básica. Caso haja associação entre essas variáveis, interpretar a modelagem estatística realizada e a influência da Densidade Básica no valor do Poder Calorífico, através da magnitude do beta 1 da equação de regressão ajustada. Adicionalmente, avaliar a qualidade dos dados experimentais por meio das seguintes estatísticas descritivas: média, desvio padrão, coeficiente de variação e score z. Como referência para a Área de Tecnologia da Madeira, nas disciplinas ministradas pela professora Gilmara, deve-se considerar dados de excelente qualidade se o Coeficiente de variação tiver valor de até 10%, de 10 a 20% dados bons, de 20 a 30 % dados ruins e acima de 30% dados péssimos. Também, no que se refere ao score Z, valores em módulo acima de 2 serão considerados como outliers (pontos atípicos). Os outliers também serão identificados por meio de gráficos box plot das variáveis do modelo.
tabela5 <- read_excel("Dados.xlsx",
sheet = "PCxDb")tabela5 %>%
kbl(caption = "Tabela dos Dados") %>%
kable_classic(full_width = F, html_font = "Times", font_size = 12)%>%
scroll_box(width = "300px", height = "300px")| Nome comum | PCS | Db |
|---|---|---|
| Amargozinho | 4989 | 0.74 |
| Macucu de paca | 5075 | 0.73 |
| Melancieira | 4927 | 0.53 |
| Cajuaçu | 4456 | 0.52 |
| Cajuaçu, Cajuí | 4411 | 0.42 |
| Sucupira vermelha | 4876 | 0.67 |
| Bolsinha | 4827 | 0.61 |
| Guatambu | 4863 | 0.58 |
| Piquiá-marfim | 4742 | 0.86 |
| Maria preta | 4516 | 0.46 |
| Amapá amargoso | 4685 | 0.73 |
| Pau-marfim | 4798 | 0.91 |
| Tanimbuca | 4685 | 0.72 |
| Murici vermelho | 4844 | 0.59 |
| Murici | 4781 | 0.56 |
| Murici | 4771 | 0.48 |
| Andiroba | 4633 | 0.43 |
| Tauari da amazônia | 4721 | 0.49 |
| Pequi | 4839 | 0.61 |
| Castanha de paca | 4714 | 0.61 |
| Cedro | 4707 | 0.38 |
| Cedrorana | 4746 | 0.46 |
| Huimba negra | 4625 | 0.57 |
| Guariúba | 4848 | 0.59 |
| Coração de negro | 4813 | 0.52 |
| Castanha jacaré | 4748 | 0.84 |
| Tauarí | 4735 | 0.60 |
| Jacarandá do cerrado | 4896 | 0.77 |
| Arapari Branco | 4663 | 0.73 |
| Faveira | 4940 | 0.70 |
| Cumaru | 4866 | 0.97 |
| Cumaru | 4828 | 1.08 |
| Cumarurana | 4907 | 0.83 |
| Louro preto | 4920 | 0.48 |
|
|
4737 | 0.62 |
| Sucupira amarela | 4772 | 0.68 |
|
|
4738 | 0.57 |
| Punga colorada | 3888 | 0.39 |
| Paineira | 4565 | 0.36 |
| Paineira do cerrado | 4565 | 0.38 |
| Quarubarana | 4523 | 0.55 |
| Fruto de passarinho | 4638 | 0.52 |
| Muchiba | 4549 | 0.62 |
| Muchiba comprida | 4931 | 0.54 |
| Matá-matá | 4747 | 0.81 |
| Casca doce | 4676 | 0.73 |
| Cupiúba | 4654 | 0.69 |
|
|
4622 | 0.47 |
| Gitó | 4828 | 0.66 |
| Jaruta | 4653 | 0.71 |
| Seringueira | 4485 | 0.51 |
| Jatobá do cerrado | 4851 | 0.78 |
| Jatobá | 4792 | 0.88 |
| Jutaí | 4743 | 0.78 |
| Angelim da mata | 4828 | 0.66 |
| Angelim rajado | 4837 | 0.67 |
| Ucuuba puna | 4645 | 0.69 |
| Ucuubarana | 4792 | 0.64 |
| Caroba | 4696 | 0.35 |
| Pau santo | 4747 | 0.46 |
| Pau santo | 4882 | 0.58 |
| Mangaba brava | 4788 | 0.74 |
| Macucu fofo | 4761 | 0.88 |
| Louro aritu | 4770 | 0.79 |
| Louro chumbo | 4889 | 1.04 |
| Ingá-cumaru | 4680 | 0.68 |
| Maçranduba | 4793 | 0.92 |
| Machin sapote | 4110 | 0.48 |
| Sapote | 4062 | 0.42 |
| Itaúba | 5263 | 0.70 |
| Lacre | 4777 | 0.65 |
| Lacre | 4626 | 0.57 |
|
|
4700 | 0.52 |
| Abiurana | 4564 | 0.88 |
| Louro inhamui | 5150 | 0.47 |
| Ucuubarana | 4827 | 0.42 |
| Cabelo de negro | 4926 | 0.50 |
| Bate caixa | 4695 | 0.43 |
| Faveira-folha-fina | 4647 | 0.72 |
| Coração de negro | 4744 | 0.42 |
| Angelim | 4861 | 0.81 |
| Macacaúba | 4987 | 0.75 |
| Abiurana | 4878 | 0.90 |
| Grão de galo | 4779 | 0.70 |
|
|
4752 | 0.20 |
| Sucupira branca | 4953 | 0.73 |
| Mandioqueira | 4398 | 0.63 |
| Pau terra folha grande | 4736 | 0.69 |
| Pau terra liso | 4725 | 0.66 |
| Mandioqueira | 4626 | 0.66 |
| Pau terra roxo | 4710 | 0.69 |
| Sapotilho | 4334 | 0.46 |
|
|
4667 | 0.47 |
| Mandiocão do cerrado | 4740 | 0.68 |
| Morototó | 4556 | 0.40 |
| Carvoeiro | 4849 | 0.72 |
| Cardeiro | 4709 | 0.59 |
| Marupá | 4627 | 0.35 |
| Quina do cerrado | 4756 | 0.72 |
| Barbatimão | 4816 | 0.55 |
| Laranjeira do cerrado | 4755 | 0.49 |
| Coração de negro | 4904 | 0.97 |
| Ipê | 4760 | 0.62 |
| Pau d’arco | 4882 | 0.87 |
| Ipê | 4823 | 0.69 |
| Ipê | 4957 | 1.05 |
| Tachi preto | 4667 | 0.51 |
| Breu sucuruba | 4606 | 0.44 |
| Ucuúba grande | 4574 | 0.50 |
| Pau doce | 4736 | 0.57 |
|
|
4680 | 0.40 |
| Gomeira | 4713 | 0.49 |
# Poder Calorífico
y <- tabela5$PCS
mean_and_sd <- function(y) {
m <- mean(y) # média
s <- sd(y) # desvio padrão
# sprintf("%0.3f U00B1 %0.3f", m, s)
sprintf("%0.0f $\\pm$ %0.2f", m, s)}
Med_e_sd<- mean_and_sd(y)
cv <- function(y) {100 * sd(y)/mean(y)}
Coef_de_Variacao<-cv(y) # coeficiente de variação
Coef_de_Variacao<-round(Coef_de_Variacao, 2)
PCS2<-data.frame(Med_e_sd, Coef_de_Variacao)
# Densidade Básica
y <- tabela5$Db
mean_and_sd <- function(y) {
m <- mean(y) # média
s <- sd(y) # desvio padrão
# sprintf("%0.3f U00B1 %0.3f", m, s)
sprintf("%0.2f $\\pm$ %0.2f", m, s)}
Med_e_sd<- mean_and_sd(y)
cv <- function(y) {100 * sd(y)/mean(y)}
Coef_de_Variacao<-cv(y) # coeficiente de variação
Coef_de_Variacao<-round(Coef_de_Variacao, 2)
Db<-data.frame(Med_e_sd, Coef_de_Variacao)
# Junção dos data.frame
dados<-rbind(Db,PCS2)
# Criar uma coluna com o nome das variáveis
dados<-mutate(dados,
Variaveis=c("Densidade (g/cm$^{3}$)", "Poder Calorífico (MJ/kg)"))
dados<-data.frame(dados)
#Organizar as colunas no data.frame
date<-dplyr::select(dados, Variaveis, Med_e_sd, Coef_de_Variacao)
# Criar da Tabela Descritiva
knitr::kable(date, align = 'cc', caption = "Tabela Descritiva",
col.names = c("Variáveis", "Média $\\pm$ sd", " CV(%)")) %>%
kable_classic(full_width = F, html_font = "Times", font_size = 16)| Variáveis | Média \(\pm\) sd | CV(%) |
|---|---|---|
| Densidade (g/cm\(^{3}\)) | 0.63 \(\pm\) 0.17 | 27.12 |
| Poder Calorífico (MJ/kg) | 4733 \(\pm\) 187.45 | 3.96 |
y <- tabela5$PCS
scale(y) # padronização da variável ## [,1]
## [1,] 1.36704612
## [2,] 1.82582415
## [3,] 1.03629917
## [4,] -1.47631074
## [5,] -1.71636901
## [6,] 0.76423313
## [7,] 0.50283634
## [8,] 0.69488296
## [9,] 0.04939294
## [10,] -1.15623304
## [11,] -0.25468087
## [12,] 0.34813212
## [13,] -0.25468087
## [14,] 0.59352502
## [15,] 0.25744344
## [16,] 0.20409716
## [17,] -0.53208154
## [18,] -0.06263425
## [19,] 0.56685188
## [20,] -0.09997665
## [21,] -0.13731905
## [22,] 0.07073145
## [23,] -0.57475856
## [24,] 0.61486354
## [25,] 0.42815155
## [26,] 0.08140071
## [27,] 0.01205054
## [28,] 0.87092569
## [29,] -0.37204269
## [30,] 1.10564933
## [31,] 0.71088684
## [32,] 0.50817097
## [33,] 0.92960660
## [34,] 0.99895677
## [35,] 0.02271980
## [36,] 0.20943179
## [37,] 0.02805443
## [38,] -4.50637958
## [39,] -0.89483626
## [40,] -0.89483626
## [41,] -1.11889064
## [42,] -0.50540840
## [43,] -0.98019031
## [44,] 1.05763768
## [45,] 0.07606608
## [46,] -0.30269252
## [47,] -0.42005434
## [48,] -0.59076245
## [49,] 0.50817097
## [50,] -0.42538897
## [51,] -1.32160652
## [52,] 0.63086742
## [53,] 0.31612435
## [54,] 0.05472757
## [55,] 0.50817097
## [56,] 0.55618263
## [57,] -0.46806600
## [58,] 0.31612435
## [59,] -0.19599996
## [60,] 0.07606608
## [61,] 0.79624090
## [62,] 0.29478584
## [63,] 0.15075088
## [64,] 0.19876253
## [65,] 0.83358329
## [66,] -0.28135401
## [67,] 0.32145898
## [68,] -3.32209211
## [69,] -3.57815427
## [70,] 2.82873426
## [71,] 0.23610493
## [72,] -0.56942393
## [73,] -0.17466144
## [74,] -0.90017089
## [75,] 2.22592127
## [76,] 0.50283634
## [77,] 1.03096454
## [78,] -0.20133459
## [79,] -0.45739674
## [80,] 0.06006220
## [81,] 0.68421370
## [82,] 1.35637686
## [83,] 0.77490238
## [84,] 0.24677419
## [85,] 0.10273922
## [86,] 1.17499950
## [87,] -1.78571917
## [88,] 0.01738517
## [89,] -0.04129574
## [90,] -0.56942393
## [91,] -0.12131516
## [92,] -2.12713538
## [93,] -0.35070418
## [94,] 0.03872369
## [95,] -0.94284791
## [96,] 0.62019816
## [97,] -0.12664979
## [98,] -0.56408931
## [99,] 0.12407774
## [100,] 0.44415543
## [101,] 0.11874311
## [102,] 0.91360272
## [103,] 0.14541625
## [104,] 0.79624090
## [105,] 0.48149783
## [106,] 1.19633801
## [107,] -0.35070418
## [108,] -0.67611650
## [109,] -0.84682460
## [110,] 0.01738517
## [111,] -0.28135401
## [112,] -0.10531128
## attr(,"scaled:center")
## [1] 4732.741
## attr(,"scaled:scale")
## [1] 187.4545
score_z <- function(y, media = NULL, despad = NULL) {if (is.null(media)) {
media <- mean(y)}
if (is.null(despad)) {despad <- sd(y)}
(y - media)/despad}
status <- ifelse(abs(score_z(y)) > 2, "outlier", "tipical") # ocorrência de outlier
table(status)## status
## outlier tipical
## 6 106
y <- tabela5$Db
scale(y) # padronização da variável ## [,1]
## [1,] 0.66235109
## [2,] 0.60356874
## [3,] -0.57207820
## [4,] -0.63086055
## [5,] -1.21868402
## [6,] 0.25087466
## [7,] -0.10181942
## [8,] -0.27816646
## [9,] 1.36773925
## [10,] -0.98355463
## [11,] 0.60356874
## [12,] 1.66165099
## [13,] 0.54478639
## [14,] -0.21938412
## [15,] -0.39573116
## [16,] -0.86598993
## [17,] -1.15990167
## [18,] -0.80720759
## [19,] -0.10181942
## [20,] -0.10181942
## [21,] -1.45381340
## [22,] -0.98355463
## [23,] -0.33694881
## [24,] -0.21938412
## [25,] -0.63086055
## [26,] 1.25017456
## [27,] -0.16060177
## [28,] 0.83869813
## [29,] 0.60356874
## [30,] 0.42722170
## [31,] 2.01434507
## [32,] 2.66095089
## [33,] 1.19139221
## [34,] -0.86598993
## [35,] -0.04303708
## [36,] 0.30965701
## [37,] -0.33694881
## [38,] -1.39503106
## [39,] -1.57137810
## [40,] -1.45381340
## [41,] -0.45451350
## [42,] -0.63086055
## [43,] -0.04303708
## [44,] -0.51329585
## [45,] 1.07382752
## [46,] 0.60356874
## [47,] 0.36843935
## [48,] -0.92477228
## [49,] 0.19209231
## [50,] 0.48600405
## [51,] -0.68964289
## [52,] 0.89748048
## [53,] 1.48530395
## [54,] 0.89748048
## [55,] 0.19209231
## [56,] 0.25087466
## [57,] 0.36843935
## [58,] 0.07452762
## [59,] -1.63016044
## [60,] -0.98355463
## [61,] -0.27816646
## [62,] 0.66235109
## [63,] 1.48530395
## [64,] 0.95626282
## [65,] 2.42582150
## [66,] 0.30965701
## [67,] 1.72043333
## [68,] -0.86598993
## [69,] -1.21868402
## [70,] 0.42722170
## [71,] 0.13330997
## [72,] -0.33694881
## [73,] -0.63086055
## [74,] 1.48530395
## [75,] -0.92477228
## [76,] -1.21868402
## [77,] -0.74842524
## [78,] -1.15990167
## [79,] 0.54478639
## [80,] -1.21868402
## [81,] 1.07382752
## [82,] 0.72113344
## [83,] 1.60286864
## [84,] 0.42722170
## [85,] -2.51189565
## [86,] 0.60356874
## [87,] 0.01574527
## [88,] 0.36843935
## [89,] 0.19209231
## [90,] 0.19209231
## [91,] 0.36843935
## [92,] -0.98355463
## [93,] -0.92477228
## [94,] 0.30965701
## [95,] -1.33624871
## [96,] 0.54478639
## [97,] -0.21938412
## [98,] -1.63016044
## [99,] 0.54478639
## [100,] -0.45451350
## [101,] -0.80720759
## [102,] 2.01434507
## [103,] -0.04303708
## [104,] 1.42652160
## [105,] 0.36843935
## [106,] 2.48460385
## [107,] -0.68964289
## [108,] -1.10111932
## [109,] -0.74842524
## [110,] -0.33694881
## [111,] -1.33624871
## [112,] -0.80720759
## attr(,"scaled:center")
## [1] 0.6273214
## attr(,"scaled:scale")
## [1] 0.1701191
score_z <- function(y, media = NULL, despad = NULL) {if (is.null(media)) {
media <- mean(y)}
if (is.null(despad)) {despad <- sd(y)}
(y - media)/despad}
status <- ifelse(abs(score_z(y)) > 2, "outlier", "tipical") # ocorrência de outlier
table(status)## status
## outlier tipical
## 6 106
par(mfrow=c(1,2))
boxplot(tabela5$Db, col="blue", main="Box Plot",
ylab= "Densidade Básica (g/cm³)", adj=0.5, ylim=c(0.2,1.2))
boxplot(tabela5$PCS, col="purple",main="Box Plot",
ylab= "Poder Calorífico (MJ/kg)", adj=0.5, ylim=c(4000,5500))chart.Correlation(tabela5[-1], histogram =TRUE)# Ajuste do modelo
modelo5<-lm(formula =PCS~Db, data=tabela5); modelo5##
## Call:
## lm(formula = PCS ~ Db, data = tabela5)
##
## Coefficients:
## (Intercept) Db
## 4452.2 447.2
# Estatísticas das estimativas dos paramentros do modelo
summary(modelo5)##
## Call:
## lm(formula = PCS ~ Db, data = tabela5)
##
## Residuals:
## Min 1Q Median 3Q Max
## -738.61 -77.19 14.12 85.70 497.76
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4452.20 62.39 71.358 < 2e-16 ***
## Db 447.20 96.02 4.657 9.02e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 172.1 on 110 degrees of freedom
## Multiple R-squared: 0.1647, Adjusted R-squared: 0.1571
## F-statistic: 21.69 on 1 and 110 DF, p-value: 9.018e-06
# Anova da regressão do modelo
anova(modelo5)## Analysis of Variance Table
##
## Response: PCS
## Df Sum Sq Mean Sq F value Pr(>F)
## Db 1 642439 642439 21.691 9.018e-06 ***
## Residuals 110 3258010 29618
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
PCS_est<-predict.lm(modelo5)
newdata1 = data.frame(tabela5, PCS_est)
Res<-(((newdata1$PCS-newdata1$PCS_est)/(newdata1$PCS))*100)
newdata1 = data.frame(tabela5, PCS_est,Res)
resid<-(newdata1$PCS-newdata1$PCS_est)
Res2<-resid^2
SQResiduo<- sum(Res2)
SQTotal<-var(newdata1$PCS)*((length(newdata1$PCS))-1)
R2<-(1-(SQResiduo/SQTotal))
a<-(length(newdata1$PCS)-1)/(length(newdata1$PCS)-3)
R2adj<-(1-(a*(1-R2)))
Syx<-sqrt(SQResiduo/((length(newdata1$PCS))-2))
Syx_Porc<-(Syx/(mean(newdata1$PCS)))*100
R2<-round(R2, 2)
R2adj<-round(R2adj,2)
Syx<-round(Syx,2)
Syx_Porc<-round(Syx_Porc, 2)
newdata11 = data.frame(R2,R2adj,Syx,Syx_Porc)
# Criar da Tabela Descritiva
knitr::kable(newdata11, align = 'cc',
caption = "Medidas de Precisão do Modelo",
col.names = c("R$^{2}$", "R$_{adj}^{2}$", "S$_{yx}$", "S$_{yx}$%")) %>%
kable_classic(full_width = F, html_font = "Times", font_size = 16)| R\(^{2}\) | R\(_{adj}^{2}\) | S\(_{yx}\) | S\(_{yx}\)% |
|---|---|---|---|
| 0.16 | 0.15 | 172.1 | 3.64 |
newdatas<-data.frame(Db= c(0.50))
PCS_estimado1 = predict(modelo5, newdatas, interval = "confidence");
PCS_estimado1 # Valores do limite de confiança dos valores preditos## fit lwr upr
## 1 4675.803 4635.484 4716.122
NORMALIDADE:
Ho: resíduos seguem distribuição normal;
Hi: resíduos não seguem distribuição normal
Resultado:
Valor de p > 0.05, não rejeita Ho para alfa=5%.
## Normalidade dos Resíduos
shapiro.test(modelo5$residuals)##
## Shapiro-Wilk normality test
##
## data: modelo5$residuals
## W = 0.90824, p-value = 1.112e-06
ks.test(modelo5$residuals, "pnorm")## Warning in ks.test.default(modelo5$residuals, "pnorm"): ties should not be
## present for the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: modelo5$residuals
## D = 0.53571, p-value < 2.2e-16
## alternative hypothesis: two-sided
INDEPENDÊNCIA DOS RESÍDUOS:
Ho: resíduos são independentes;
Hi: resíduos não são independentes
Resultado:
Valor de p > 0.05, não rejeita Ho para alfa=5%.
## Independencia dos Resíduos (Durbin-Watson)
durbinWatsonTest(modelo5)## lag Autocorrelation D-W Statistic p-value
## 1 0.09057317 1.805312 0.274
## Alternative hypothesis: rho != 0
HOMOSCEDASTICIDADE DOS RESÍDUOS:
Ho: resíduos são homogênios;
Hi: resíduos não são homogênios;
Resultado:
Valor de p > 0.05, não rejeita Ho para alfa=5%.
## Homocedasticidade (Breusch-Pagan)
bptest(modelo5)##
## studentized Breusch-Pagan test
##
## data: modelo5
## BP = 5.6185, df = 1, p-value = 0.01777
ncvTest(modelo5)## Non-constant Variance Score Test
## Variance formula: ~ fitted.values
## Chisquare = 17.91577, Df = 1, p = 2.309e-05
Valores em vermelho estimados; valores em azul observados.
G1<-ggplot(newdata1) +
geom_point(size=2, aes(x=PCS, y=PCS_est), color="red2")+
geom_abline(intercept = 0, slope = 1, color = "black")+
geom_point(size=2, aes(x=PCS_est, y=PCS), color="blue2")+
theme_classic()+ # aparencia clean do gráfico
labs(x = "PCS Observado (MJ/kg)",
y = "PCS Estimado (MJ/kg)",
title = "Gráfico 1:1")+ # legendas
scale_x_continuous(breaks = seq(3800, 5600, 200), limits= c(3800, 5600)) + # eixo x
scale_y_continuous(breaks = seq(3800, 5600, 200), limits= c(3800, 5600)) + # eixo y
theme( plot.title = element_text(hjust = 0.5),
legend.title = element_text(hjust = 0.5))+ # centralizar títulos
theme(plot.title = element_text(size = 13, face = "bold"),
axis.title = element_text(size = 12),
axis.text = element_text(size = 10)) # negrito nos títulos
G2<-ggplot(newdata1) +
geom_point(size=2, aes(x=PCS, y=Res)
,color="black")+ # gráfico de pontos
theme_classic()+ # aparencia clean do gráfico
labs(x = "PCS Observado (MJ/kg)",
y = "Resíduo (%)",
title = "Gráfico de Resíduos")+ # legendas
scale_x_continuous(breaks = seq(3800, 5600, 400), limits= c(3800, 5600)) +
scale_y_continuous(breaks = seq(-30, 30, 10), limits= c(-30,30)) +
theme( plot.title = element_text(hjust = 0.5),
legend.title = element_text(hjust = 0.5))+ # centralizar títulos
theme(plot.title = element_text(size = 13, face = "bold"),
axis.title = element_text(size = 12),
axis.text = element_text(size = 10))+
# negrito nos títulos
geom_hline(yintercept = 0, color="black")+ # linha no 0 do eixo y
theme(axis.title.y = element_text(angle = 90))
grid.arrange(G1,G2, ncol=1) grafico<-ggplot(data = tabela5, #banco de dados
mapping = aes(x = Db, y = PCS)) + # eixo x e y
geom_point(size=2) + # gráfico de dispersão
geom_smooth(method = "lm", # método linear
formula='y ~ x', # fórmula
color="red", # cor
lwd=0.8)+ # tamanho da linha
theme_classic()+ # modo classico de gráfico (fundo branco)
stat_regline_equation(aes(label=paste(..eq.label.., # inserir a equação
..rr.label.., # inserir o R2
sep = "~~~~")), # espaço entre a formula e o R2
formula=y ~ x, # formula
label.x = 0.20, label.y=5300)+ # localização xy da formula
scale_x_continuous(breaks = seq(0.20, 1.20, 0.20), limits= c(0.20, 1.20)) +
scale_y_continuous(breaks = seq(3800, 5400, 400), limits= c(3800, 5400))+
labs(x = "Densidade Básica (g/cm³)", # legenda do eixo x
y = "Poder Calorífico Superior (MJ/kg)")+ # legenda do eixo y
theme(plot.title = element_text(hjust = 0.5),
legend.title = element_text(hjust = 0.5))+ # Alinhamento do Título e eixos
theme(plot.title = element_text(size = 12, face = "bold",family="TT Times New Roman"),
axis.title = element_text(size = 12, face = "bold", family="TT Times New Roman"),
axis.text = element_text(size = 12, face = "bold", family="TT Times New Roman"))
# formatação dos títulos e eixos, com tamanho da fonte (size), negrido (bold) e
# tipo de fonte (TI Times New Roman)
graficoDe acordo com GROLEMUND (2018), a ciência de dados é uma área em crescimento.
A regressão não linear geralmente possui parâmetros interpretáveis (ROSSE; VENCOVSKY, 2000). Para CHEN et al. (2021), a análise multivariada é a melhor opção.
No artigo de QUIRINO et al. (2005) vemos informações equivocadas sobre a relação do poder calorífico e a densidade básica.