R-Project
Jump to navigation
Jump to search
Install
R3 (console only)
- Prerequisites:
apt-get install gcc g++ make autoconf automake cmake libpango1.0-dev libtool libcurl4-gnutls-dev libbz2-dev libpng-dev libtiff5-dev libreadline-dev libx11-dev libxt-dev gfortran libpcre++-dev libcairo2-dev
- Optional: all possible prerequisites from Debian package:
apt-get build-dep r-base-dev
- Configure, make, install
wget -c https://cloud.r-project.org/src/base/R-3/R-3.4.1.tar.gz tar -xzf R-3.4.1.tar.gz cd R-3.4.1 ./configure --prefix=/home/shared/opt/software/R-3.4.1 --enable-R-shlib --enable-prebuilt-html --with-blas --with-lapack --with-readline --with-tcltk --with-cairo --with-libpng --with-jpeglib --with-libtiff --with-valgrind-instrumentation --with-recommended-packages --with-x make make install
RStudio (graphical editor only)
- Prerequisites: R3
OBS: debian 64-bit example, in 2017-08-06 still does not work on Debian 9
wget -c https://download1.rstudio.org/rstudio-1.0.153-amd64-debian.tar.gz tar -xzf rstudio-1.0.153-amd64-debian.tar.gz mv rstudio-1.0.153 /home/shared/opt/software/ export PATH=/home/shared/opt/software/R-3.4.1/bin/:$PATH export LD_LIBRARY_PATH=/home/shared/opt/software/R-3.4.1/lib:$LD_LIBRARY_PATH /home/shared/opt/software/rstudio-1.0.153/bin/rstudio
Package Install (ggplot2 example)
install.packages("ggplot2")
Usage
- simplest var: vector
x <- c(10.4, 5.6, 3.1, 6.4, 21.7) x [1] 10.4 5.6 3.1 6.4 21.7 x <- x * 2 x [1] 20.8 11.2 6.2 12.8 43.4
Histograms
x <- cbind(min1 = c(1:4, 4:7), min2 = c(2:5, 7:4), min3 = c(4:1, 2:5)) cx <- colSums(x) hist(cx) barplot(cx)
Histograms and value ranges
v <- c(1, 75, 79, 90, 91, 92, 109, 120, 167, 198, 203, 204, 206, 224, 230, 236, 240, 245, 263, 344) vv <- v - min(v) # hist(vv) svv <- seq(min(vv), max(vv), 60) # 0 60 120 180 240 300 isvv <- findInterval(vv, svv) # [1] 1 2 2 2 2 2 2 2 3 4 4 4 4 4 4 4 4 5 5 6 tisvv <- table(isvv) plot(tisvv, type="h", lwd=5, ylab="Freq") ntisvv <- setNames(tisvv, paste("min", 1:6, sep="")) barplot(ntisvv)
ggplot2 usage
require(ggplot2) data(diamonds) head(diamonds) hist(diamonds$carat, main = "Carat Histogram", xlab = "Carat") plot(price ~ carat, data = diamonds) boxplot(diamonds$carat)
Clustering
K-means
k-means funciona com um número fixo de atributos de tipo continuo
- utilizar database disponível em http://archive.ics.uci.edu/ml/datasets/Wine
- adicionar header :
Cultivar,Alcohol,Malic.acid,Ash,Alcalinity.of.ash,Magnesium,Total.phenols,Flavanoids,Nonflavanoid.phenols,Proanthocyanins,Color.intensity,Hue,OD280.OD315.of.diluted.wines,Proline
- importar no R
wine <- read.table("wine.csv", header = TRUE, sep = ",")
- a primeira coluna é o lugar onde foi cultivado, grupo de 1 a 3, removendo essa coluna é possível tentar obté-la novamente com o k-means
- remover a coluna com
wineTrain <- wine[, which(names(wine) != "Cultivar")]
- configurar o gerador de números casuais para iniciar de um ponto determinado da sequência e garantir resultados reproducíveis
set.seed(278613)
- utilizar o k-means definindo 3 grupos e 25 tentativas de definir os pontos iniciais de cada grupo, retornando a tentativa que restituiu o resultado melhor
wineK3N25 <- kmeans(x = wineTrain, centers = 3, nstart = 25)
- instalar e inluir o package 'useful' para facilmente visualizar os dados
install.packages('useful') require(useful)
- visualizar os dados originais, de acordo com a classificação produzida pelo k-means
plot(wineK3N25, data = wineTrain)
- para comparar com o grupo original, visualizar de acordo com a classificação original
plot(wineK3N25, data = wine, class = "Cultivar")
- existem métodos para determinar melhor o número de clusters, quando não é conhecido
- por exemplo, usar o método Hartigan’s Rule da função FitKMeans do pacote 'useful'
wineBest <- FitKMeans(wineTrain, max.clusters=20, nstart=25, seed=278613)
- de acordo com o gráfico a seguir (não sei porque) deveriam ser usados 13 clusters
PlotHartigan(wineBest)
- uma matriz de confusão pode ajudar a visualizar a qualidade do resultado da clusterização
- se o resultado for bom, os segmentos na diagonal deveriam ser os de maior tamanho
plot(table(wine$Cultivar, wineK3N25$cluster), main="Confusion Matrix", xlab="Cultivar", ylab="Cluster")
- uma alternativa ao Hartigan’s Rule método é o Gap statistic TO BE CONTINUED
- um método diferente para visualizar o melhor número de clusters para usar é mostrado em [4]
install.packages('NbClust') library(NbClust) set.seed(278613) nc <- NbClust(wineTrain, min.nc=2, max.nc=15, method="kmeans") barplot(table(nc$Best.n[1,]), xlab="Numer of Clusters", ylab="Number of Criteria", main="Number of Clusters Chosen by 26 Criteria")
- de acordo com o resultado o número melhor de clusters é 2, porém o autor do post acima utiliza uma função scale() que resulta na escolha de 3 clusters
wineTrainScaled <- scale(wineTrain) set.seed(278613) ncScaled <- NbClust(wineTrainScaled, min.nc=2, max.nc=15, method="kmeans") barplot(table(ncScaled$Best.n[1,]), xlab="Numer of Clusters", ylab="Number of Criteria", main="Number of Clusters Chosen by 26 Criteria")
- algumas discussões e exemplos de uso podem ser encontrados em
http://stats.stackexchange.com/questions/89809/is-it-important-to-scale-data-before-clustering https://stat.ethz.ch/pipermail/r-help/2008-April/160291.html http://www.stat.berkeley.edu/~s133/Cluster2a.html http://www.statmethods.net/advstats/cluster.html http://www.endmemo.com/program/R/scale.php http://jeromyanglim.tumblr.com/post/72622792597/how-to-use-scale-function-in-r-to-centre-data-frame-but http://rtutorialseries.blogspot.com.br/2012/03/r-tutorial-series-centering-variables.html