library(stats)
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.2.1
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(rpart)
## Warning: package 'rpart' was built under R version 4.2.1
library(rpart.plot)
## Warning: package 'rpart.plot' was built under R version 4.2.1
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.2.1
## ── Attaching packages
## ───────────────────────────────────────
## tidyverse 1.3.2 ──
## ✔ ggplot2 3.3.6 ✔ purrr 0.3.4
## ✔ tibble 3.1.7 ✔ stringr 1.4.0
## ✔ tidyr 1.2.0 ✔ forcats 0.5.2
## ✔ readr 2.1.2
## Warning: package 'ggplot2' was built under R version 4.2.1
## Warning: package 'readr' was built under R version 4.2.1
## Warning: package 'forcats' was built under R version 4.2.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
library(ggplot2)
df <- read.csv("C:\\Users\\aldof\\Documents\\1 Tec\\Semana Tec 1 - Bootcamp de Programación\\Tercera Clase\\cancer_de_mama.csv")
tree <- rpart(formula =diagnosis ~ ., data=df)
tree
## n= 569
##
## node), split, n, loss, yval, (yprob)
## * denotes terminal node
##
## 1) root 569 212 B (0.62741652 0.37258348)
## 2) radius_worst< 16.795 379 33 B (0.91292876 0.08707124)
## 4) concave.points_worst< 0.1358 333 5 B (0.98498498 0.01501502) *
## 5) concave.points_worst>=0.1358 46 18 M (0.39130435 0.60869565)
## 10) texture_worst< 25.67 19 4 B (0.78947368 0.21052632) *
## 11) texture_worst>=25.67 27 3 M (0.11111111 0.88888889) *
## 3) radius_worst>=16.795 190 11 M (0.05789474 0.94210526) *
rpart.plot(tree)
Para poder visualizarlo de una forma más gráfica y sencilla de comprender utilizamos el apoyo de la librería ggplot2.
prp(tree, extra=7, prefix="fracción\n")
ggplot(data=df, mapping=aes(radius_worst, concave.points_worst)) +
geom_point(aes(color=diagnosis)) +
theme_bw()
Con este gráfico podemos comprobar lo que se observaba en el árbol de decisiones, no necesariamente entre más grande y concavo esté el tumor es que sea malo, sino que se concentra en un rango de entre 15 y 25 de radio y 0.15 y 0.25 de concavo, lo que nos indica que entre más temprano se detecte el tumor más posibilidades hay de que el diagnóstico sea bueno, como se observa en la gran concentración en la parte inferior izquierda del gráfico.