Trabalho III - Análise de Dados Categóricos
Vitor Nickhorn Kroeff
GRR20195798
Questão 1
a)
Independência sugere que os sintomas não estão ligados à gravidade da DAVF, tornando o sistema de classificação menos útil. Dependência, por outro lado, indica que os sintomas estão associados à classificação, validando o sistema, o que é a preferência dos pesquisadores para justificar o sistema de classificação.
b)
require(knitr)
require(reshape2)
lin <- c("Hemorragia", "Hipertensão intracraniana", "Déficit neurológico focal",
"Convulsões", "Deficiência cardíaca", "Mielopatia", "Sintomas não agressivos")
col <- c("1", "2a", "2b", "2a e 2b", "3", "4", "5")
dados <- c( 0, 0, 2, 1, 10, 19, 5,
1, 8, 1, 2, 0, 4, 1,
0, 0, 0, 6, 8, 2, 0,
0, 1, 0, 2, 1, 3, 0,
0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 6,
83, 17, 7, 6, 6, 1, 0)
tabela <- data.frame(t(matrix(dados, 7,7)), row.names = lin)
tabela <- `colnames<-`(tabela, col)
kable(tabela)| 1 | 2a | 2b | 2a e 2b | 3 | 4 | 5 | |
|---|---|---|---|---|---|---|---|
| Hemorragia | 0 | 0 | 2 | 1 | 10 | 19 | 5 |
| Hipertensão intracraniana | 1 | 8 | 1 | 2 | 0 | 4 | 1 |
| Déficit neurológico focal | 0 | 0 | 0 | 6 | 8 | 2 | 0 |
| Convulsões | 0 | 1 | 0 | 2 | 1 | 3 | 0 |
| Deficiência cardíaca | 0 | 1 | 0 | 1 | 0 | 0 | 0 |
| Mielopatia | 0 | 0 | 0 | 0 | 0 | 0 | 6 |
| Sintomas não agressivos | 83 | 17 | 7 | 6 | 6 | 1 | 0 |
Teremos o teste como
## Warning in chisq.test(tabela, correct = FALSE): Aproximação do qui-quadrado
## pode estar incorreta
##
## Pearson's Chi-squared test
##
## data: tabela
## X-squared = 303.2, df = 36, p-value < 2.2e-16
Com base no resultado, podemos interpretar que há uma diferença significativa.
c)
Para este caso, o teste qui-quadrado de Pearson pode ser inadequado, pois pressupõe independência entre as categorias.
Questão 2
a)
#Carregando os dados
cereal = read.csv("http://leg.ufpr.br//~lucambio//ADC//cereal_dillons.csv")
stand01 <- function (x){(x - min(x)) / ( max(x) - min(x))}
cereal2 <- data.frame (Shelf = cereal$Shelf, sugar = stand01 (x = cereal$sugar_g / cereal$size_g ),
fat = stand01 (x = cereal$fat_g / cereal$size_g ),
sodium = stand01 (x = cereal$sodium_mg / cereal$size_g ))
kable(head(cereal2))| Shelf | sugar | fat | sodium |
|---|---|---|---|
| 1 | 0.6428571 | 0.000 | 0.5666667 |
| 1 | 0.1285714 | 0.000 | 0.9000000 |
| 1 | 0.1285714 | 0.000 | 1.0000000 |
| 1 | 0.1125000 | 0.675 | 0.8166667 |
| 1 | 0.7800000 | 0.360 | 0.6533333 |
| 1 | 0.6387097 | 0.000 | 0.5419355 |
b)
Box Plot:
par(mfrow = c(1,3))
boxplot ( formula = sugar ~ Shelf , data = cereal2 , ylab = "Sugar", xlab = "Prateleira",
pars = list ( outpch = NA), col ="steelblue4")
stripchart (x = cereal2$sugar ~ cereal2$Shelf , lwd = 2, col = "red4",
method = "jitter", vertical = TRUE , pch = 1, add = TRUE)
boxplot ( formula = fat ~ Shelf , data = cereal2 , ylab = "Fat", xlab = "Prateleira",
pars = list ( outpch = NA), col ="steelblue4")
stripchart (x = cereal2$fat ~ cereal2$Shelf , lwd = 2, col = "red4",
method = "jitter", vertical = TRUE , pch = 1, add = TRUE)
boxplot ( formula = sodium ~ Shelf , data = cereal2 , ylab = "Sodium", xlab = "Prateleira",
pars = list ( outpch = NA), col ="steelblue4")
stripchart (x = cereal2$sodium ~ cereal2$Shelf , lwd = 2, col = "red4",
method = "jitter", vertical = TRUE , pch = 1, add = TRUE)Coordenadas Paralelas:
c)
d)
Construindo o ajuste teremos que
require(nnet)
require(MASS)
require(car)
ajuste <- multinom(Shelf ~ sugar + fat + sodium, data = cereal2)## # weights: 20 (12 variable)
## initial value 55.451774
## iter 10 value 37.329384
## iter 20 value 33.775257
## iter 30 value 33.608495
## iter 40 value 33.596631
## iter 50 value 33.595909
## iter 60 value 33.595564
## iter 70 value 33.595277
## iter 80 value 33.595147
## final value 33.595139
## converged
## Call:
## multinom(formula = Shelf ~ sugar + fat + sodium, data = cereal2)
##
## Coefficients:
## (Intercept) sugar fat sodium
## 2 6.900708 2.693071 4.0647092 -17.49373
## 3 21.680680 -12.216442 -0.5571273 -24.97850
## 4 21.288343 -11.393710 -0.8701180 -24.67385
##
## Std. Errors:
## (Intercept) sugar fat sodium
## 2 6.487408 5.051689 2.307250 7.097098
## 3 7.450885 4.887954 2.414963 8.080261
## 4 7.435125 4.871338 2.405710 8.062295
##
## Residual Deviance: 67.19028
## AIC: 91.19028
## Analysis of Deviance Table (Type II tests)
##
## Response: Shelf
## LR Chisq Df Pr(>Chisq)
## sugar 22.7648 3 4.521e-05 ***
## fat 5.2836 3 0.1522
## sodium 26.6197 3 7.073e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
A inclusão da variável fat não é significativa para o modelo.
e)
Nosso modelo com interação será dado por:
## # weights: 36 (24 variable)
## initial value 55.451774
## iter 10 value 36.170336
## iter 20 value 31.166546
## iter 30 value 29.963705
## iter 40 value 28.414027
## iter 50 value 27.891712
## iter 60 value 27.763967
## iter 70 value 27.622579
## iter 80 value 27.438263
## iter 90 value 27.015534
## iter 100 value 26.772481
## final value 26.772481
## stopped after 100 iterations
## Call:
## multinom(formula = Shelf ~ sugar * fat * sodium, data = cereal2)
##
## Coefficients:
## (Intercept) sugar fat sodium sugar:fat sugar:sodium fat:sodium
## 2 -4.563627 8.944868 22.063003 1.030077 35.60873 -12.250084 -23.75955
## 3 24.498320 -22.248456 35.981865 -27.899087 -17.12487 13.253103 -59.54150
## 4 27.246742 -21.852777 7.298799 -29.106797 41.08251 2.887805 -30.85250
## sugar:fat:sodium
## 2 -55.88455
## 3 37.71571
## 4 -22.59552
##
## Std. Errors:
## (Intercept) sugar fat sodium sugar:fat sugar:sodium fat:sodium
## 2 25.21113 29.72894 96.57821 27.29915 135.1117 31.98647 116.0776
## 3 22.83750 25.81043 101.17670 24.61166 150.1228 26.89827 138.0237
## 4 22.80359 26.00692 100.83444 24.51538 150.6750 28.86631 138.5448
## sugar:fat:sodium
## 2 158.8091
## 3 212.2222
## 4 217.3953
##
## Residual Deviance: 53.54496
## AIC: 101.545
## Analysis of Deviance Table (Type II tests)
##
## Response: Shelf
## LR Chisq Df Pr(>Chisq)
## sugar 19.2525 3 0.0002424 ***
## fat 6.1167 3 0.1060686
## sodium 30.8407 3 9.183e-07 ***
## sugar:fat 3.2309 3 0.3573733
## sugar:sodium 3.0185 3 0.3887844
## fat:sodium 3.1586 3 0.3678151
## sugar:fat:sodium 2.5884 3 0.4595299
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Podemos observar que o a interação é não significatica de acordo com o resultado do teste.
f)
pred <- predict(ajuste, newdata = data.frame(sugar = 0.12, fat = 0.5, sodium = 0.13), type = "probs")
round(pred, 4)## 1 2 3 4
## 0.0000 0.0000 0.6012 0.3988
Podemos observar que a prateleira 3 é a que apresenta maior probabilidade.
g)
require(ggplot2)
mean_fat <- mean(cereal2$fat)
mean_sodium <- mean(cereal2$sodium)
sugar_values <- seq(0, 1, by = 0.01)
pred <- predict(ajuste, newdata = data.frame(sugar = sugar_values, fat = mean_fat, sodium = mean_sodium), type = "probs")
plot_data <- data.frame(sugar = sugar_values,
prob_shelf1 = pred[,1], prob_shelf2 = pred[,2],
prob_shelf3 = pred[,3], prob_shelf4 = pred[,4])
ggplot(plot_data, aes(x = sugar)) +
geom_line(aes(y = prob_shelf1, color = "1")) +
geom_line(aes(y = prob_shelf2, color = "2")) +
geom_line(aes(y = prob_shelf3, color = "3")) +
geom_line(aes(y = prob_shelf4, color = "4")) +
labs(x = "Teor de Açúcar", y = "pi.hat", color = "Prateleira") +
scale_color_manual(values = c("1" = "red3", "2" = "royalblue", "3" = "orange3", "4" = "limegreen")) +
theme_minimal()h)
## sugar fat sodium
## 2 14.777 58.2480 0
## 3 0.000 0.5729 0
## 4 0.000 0.4189 0
## , , 2
##
## 2.5 % 97.5 %
## (Intercept) 0.00 330392859.41
## sugar 0.00 294843.41
## fat 0.63 5360.63
## sodium 0.00 0.03
##
## , , 3
##
## 2.5 % 97.5 %
## (Intercept) 1184.66 5.728017e+15
## sugar 0.00 7.000000e-02
## fat 0.01 6.511000e+01
## sodium 0.00 0.000000e+00
##
## , , 4
##
## 2.5 % 97.5 %
## (Intercept) 825.32 3.751459e+15
## sugar 0.00 1.600000e-01
## fat 0.00 4.676000e+01
## sodium 0.00 0.000000e+00
Questão 3
Carregando os dados:
dados <- array(data = c(8, 69, 2, 25, 20, 7, 100,
39, 139, 39, 57, 48, 20, 177,
48, 131, 50, 115, 16, 19, 190),
dim = c(7,3),
dimnames = list(Guilda = c("Air-Arth", "Leaf-Arth", "Wood-Arth", "Ground-Arth", "Fruit", "Seeds", "Nectar"),
Degradação = c("Alta", "Moderada", "Baixa")))
kable(dados)| Alta | Moderada | Baixa | |
|---|---|---|---|
| Air-Arth | 8 | 39 | 48 |
| Leaf-Arth | 69 | 139 | 131 |
| Wood-Arth | 2 | 39 | 50 |
| Ground-Arth | 25 | 57 | 115 |
| Fruit | 20 | 48 | 16 |
| Seeds | 7 | 20 | 19 |
| Nectar | 100 | 177 | 190 |
Teste:
##
## Pearson's Chi-squared test
##
## data: dados
## X-squared = 68.496, df = 12, p-value = 6.115e-10
Existe evidência contra a hipótese de independência.
Transformando os dados:
require(dplyr)
df <- melt(dados, varnames = c("Guilda", "Degradação"))
colnames(df) <- c("Guilda", "Degradação", "Dados")
df$Degradação <- factor(df$Degradação, levels = c("Baixa", "Moderada", "Alta"))
df <- df %>% mutate(Valor = Dados) %>% select(-Dados)#Regressão ordinal
ajuste.ord <- polr(Degradação ~ Guilda + Valor, data = df, method = "logistic")
Anova(ajuste.ord)## Analysis of Deviance Table (Type II tests)
##
## Response: Degradação
## LR Chisq Df Pr(>Chisq)
## Guilda 15.937 6 0.0141 *
## Valor 18.647 1 1.573e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Aqui podemos observar que, ao nível de 5%, a variável Guilda é significativa para o modelo.