R-Project

From campisano.org
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

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

References

  • R-Project
  • RStudio
  • R for Everyone: Advanced Analytics and Graphics (Addison-Wesley Data & Analytics Series) ISBN-13: 978-0321888037