1 Instalação dos pacotes

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

2 Poder Calorífico Superior e a Densidade Básica

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.

2.1 Banco de Dados

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")
Tabela dos Dados
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

2.2 Análise Descritiva

# 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)
Tabela Descritiva
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

2.2.1 Poder Calorífico Superior - outlier

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

2.2.2 Densidade Básica - outlier

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

2.3 Gráfico Box Plot

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))

2.4 Matriz de correlação (valor de r e o pvalor)

chart.Correlation(tabela5[-1], histogram =TRUE)

2.5 Regressão Linear Múltipla

# 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

2.5.1 Medidas de Precisão para Análise do Modelo

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)
Medidas de Precisão do Modelo
R\(^{2}\) R\(_{adj}^{2}\) S\(_{yx}\) S\(_{yx}\)%
0.16 0.15 172.1 3.64

2.5.2 Predição do PCS aplicando o modelo

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

2.5.3 Testes de hipoteses

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

2.5.4 Gráfico 1:1 e de Resíduos

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) 

2.6 Regressão Linear

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) 
grafico

3 Citações

De 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.

Referências

CHEN, Xue; LI, Xiaohui; XIE, Jinmei; YANG, Hao; LIU, Aichun. Non-invasive discrimination of multiple myeloma using label-free serum surface-enhanced raman scattering spectroscopy in combination with multivariate analysis. Analytica Chimica Acta, p. 339296, Nov. 2021. DOI 10.1016/j.aca.2021.339296. Available at: https://doi.org/10.1016/j.aca.2021.339296.
GROLEMUND, Garrett. R para data science. S.l: Alta Books, 2018.
QUIRINO, Waldir F; VALE, AT do; ANDRADE, APA de; ABREU, Vera Lúcia Silva; AZEVEDO, AC dos S. Poder calorı́fico da madeira e de materiais ligno-celulósicos. Revista da madeira, vol. 89, no. 100, p. 100–106, 2005.
ROSSE, Leornado Novaes; VENCOVSKY, Roland. Modelo de regressão não-linear aplicado ao estudo da estabilidade fenotı́pica de genótipos de feijão no estado do paraná. Bragantia, vol. 59, no. 1, p. 99–107, 2000. DOI 10.1590/s0006-87052000000100016. Available at: https://doi.org/10.1590/s0006-87052000000100016.