Benvindo ao SaiProg

Este blog é sobre programação científica.

Utilizarei as linguagens de programação científica Matlab, R e Python para ilustrar como resolver problemas típicos em análise de dados e processamento de sinais biológicos. R será utilizado apenas para análise estatística. Sempre trabalhei com Matlab, estou mudando para Python e neste blog pretendo mostrar (logo que aprender) como Python pode ser utilizado em programação científica.

Apenas a introdução à programação científica neste blog é um pouco conceitual e falo sobre lógica de programação, algo fundamental para programar em computadores seja qual for a linguagem de programação. Após esta introdução, o resto do blog são (serão) exemplos de programação científica para resolver problemas.

Posted in Programação | Comentários desativados

Anova medidas repetidas em R

Leia este post sobre Anova medidas repetidas em R: http://www.r-statistics.com/2010/04/repeated-measures-anova-with-r-tutorials/

Dentre as opções em R, a função ezANOVA da biblioteca ez parece ser bem completa, permite rodar ANOVA between e within subjects (mixed design) com quantos fatores e níveis desejados, testa esfericidade dos dados e calcula a medida eta squared do tamanho do efeito (effect size).

Este post explica como usar o ezANOVA: http://yatani.jp/HCIstats/ANOVA#SphericityEZ e veja o manual da biblioteca em: http://cran.r-project.org/web/packages/ez/ez.pdf

Depois de ter instalado e carregado a biblioteca ez, para gerar alguns resultados da tabela do ANOVA em R similar ao SAS e SPSS (veja http://blog.gribblelab.org/2009/03/09/repeated-measures-anova-using-r/), digite:

options(contrasts=c(“contr.sum”, “contr.poly”))

Considere os seguintes dados:

Group Subject Target Cursor Dist
E DL d25 AC90 0.18
E DL d25 BC95 0.18
E DL d25 CC100 0.17
E DL d35 AC90 0.18
E DL d35 BC95 0.18
E DL d35 CC100 0.18
E DS d25 AC90 0.21
E DS d25 BC95 0.20
E DS d25 CC100 0.18
E DS d35 AC90 0.22
E DS d35 BC95 0.21
E DS d35 CC100 0.22
E EA d25 AC90 0.19
E EA d25 BC95 0.16
E EA d25 CC100 0.15
E EA d35 AC90 0.22
E EA d35 BC95 0.21
E EA d35 CC100 0.19
Y AR d25 AC90 0.17
Y AR d25 BC95 0.16
Y AR d25 CC100 0.11
Y AR d35 AC90 0.25
Y AR d35 BC95 0.21
Y AR d35 CC100 0.19
Y BD d25 AC90 0.16
Y BD d25 BC95 0.14
Y BD d25 CC100 0.11
Y BD d35 AC90 0.23
Y BD d35 BC95 0.21
Y BD d35 CC100 0.19
Y CX d25 AC90 0.16
Y CX d25 BC95 0.14
Y CX d25 CC100 0.13
Y CX d35 AC90 0.20
Y CX d35 BC95 0.19
Y CX d35 CC100 0.17

Onde Group é um fator between, Subject são os diferentes indivíduos, Target e Cursor são fatores within e Dist é a variável dependente.

A linha de comando:

ezANOVA(data=dados, dv=.(Dist), wid=.(Subject), within=.(Target,Cursor), between=.(Group), type=3)

Produz o seguinte resultado:

Do manul do ez, estes resultados são:

A list containing one or more of the following components:

ANOVA

  • A data frame containing the ANOVA results.

Mauchly’s Test for Sphericity

  • If any within-Ss variables with >2 levels are present, a data frame containing the results of Mauchly’s test for Sphericity. Only reported for effects >2 levels because sphericity necessarily holds for effects with only 2 levels.

Sphericity Corrections

  • If any within-Ss variables are present, a data frame containing the Greenhouse-Geisser & Huynh-Feldt epsilon values, and corresponding corrected p-values.

Levene’s Test for Homgeneity

  • If the design is purely between-Ss, a data frame containing the results of Levene’s test for Homgeneity of variance. Note that Huynh-Feldt corrected p-values where the Huynh-Feldt epsilon >1 will use 1 as the correction epsilon.

aov

  • An aov object corresponding to the requested ANOVA.

Digite ?ezANOVA para o help da função

Posted in Programação, R | Leave a comment

Abrir arquivos do Excel (.xls) no R

Há várias bibliotecas para abrir (ler e escrever) arquivos do Excel (.xls) no R. Uma destas bibliotecas é a xlsReadWrite. Instale-a da forma usual, vá em Packages, Install Packages(s)…, selecione um CRAN mirror e instale-a. Depois carregue-a com Packages, Load package…, ou melhor, digite library(xlsReadWrite) na linha de comando.

Para usar o xlsReadWrite, você precisa atualizar uma de suas funções (como explicado após xlsReadWrite ser carregada pela primeira vez e esta atualização precisa ser feita apenas  uma vez), digite:

xls.getshlib()

Para abrir um arquivo Excel, digite por exemplo (com o caminho e nome apropriados para seu arquivo:

x <- read.xls(“D:/dados.xls”)

E é só isto.

Digite ?xlsReadWrite para o help da função e outras opções (importar apenas uma determinada planilha, algumas células, etc.).

Posted in Programação, R | Leave a comment

Conceitos básicos de R

#Para aprender sobre R, um começo é digitar help.start() na linha de comando do R

#Pequena introdução:

#data types:
a = c(1,2,5.3,6,-2,4) # numeric vector
b = c(“one”,”two”,”three”) # character vector
c = c(TRUE,TRUE,TRUE,FALSE,TRUE,FALSE) #logical vector

#generates 5 x 4 numeric matrix
y = matrix(1:20, nrow=5,ncol=4)

#size, number of rows and of columns:
dim(y); dim(y)[1]; dim(y)[2]

#Select data
y[1,1] # one value
y[1,] # first row
y[-1,] # all but first row
y[c(2,4)] # 2nd and 4th elements of vector

#input data:
age = c(43, 30, 40)
gender = c(“male”, “female”, “female”)
weight = c(70, 100, 50)
data = data.frame(age,gender,weight)

#import data:
data = read.table(‘g:/r/data.txt’, header=TRUE, sep=”)

#mean, median, 25th and 75th quartiles, min, max:
summary(data, digits=2)

#Visualize data:
boxplot(data)
plot(x,y, xlab=”x axis”, ylab=”y axis”, main=”my plot”, ylim=c(0,20), xlim=c(0,20), pch=15, col=”blue”)
%plot all columns in differents plots at the same window:
par(mfrow = c(dim(data)[2]-1,1)) # windows() for a new window
for (i in 1:(dim(data)[2]-1))
plot(data[,1],data[,i+1],xlab=names(data)[1],ylab=names(data)[i+1])

#univariate normality:
library(nortest)
ad.test(data[,2])

#homegeneity of variances:
bartlett.test(y~G, data=data) #y is numeric and G is the grouping variable
plot(count ~ spray, data = InsectSprays)
bartlett.test(InsectSprays$count, InsectSprays$spray)
bartlett.test(count ~ spray, data = InsectSprays)

#t-tests:
#independent 2-group t-test
t.test(y1,y2) # y1 and y2 are numeric
#paired t-test
t.test(y1,y2,paired=TRUE) # y1 & y2 are numeric
#one samle t-test
t.test(y,mu=3) # Ho: mu=3

#nonparametric Tests of Group Differences:
# independent 2-group Mann-Whitney U Test
wilcox.test(y1,y2) # y and x are numeric
# dependent 2-group Wilcoxon Signed Rank Test
wilcox.test(y1,y2,paired=TRUE) # y1 and y2 are numeric

#Control Structures
#if else
if (cond) expr
if (cond) expr1 else expr2
#for
for (var in seq) expr
#while
while (cond) expr
#switch
switch(expr, …)

#function
rms = function(x) {
y = sqrt(sum(x^2)/length(x))
return(y)
}

Posted in Programação, R | Leave a comment

Introdução à Programação científica em Python

Python é uma linguagem de programação que permite trabalhar com mais rapidez e integrar seus sistemas de forma mais eficaz. Você pode aprender a usar Python e ver os ganhos quase imediatos na produtividade e menores custos de manutenção.”

Python pode ser utilizado (e de fato é) para muito mais coisas que apenas programação científica. Por isto Python pode parecer um pouco mais complicado que por exemplo, Matlab, para executar operações básicas e típicas de programação científica.

Cada um deve ter seus argumentos para escolher uma linguagem de programação em função de seus interesses. Os fatores que me levaram a utilizar Python são: poder escrever programas que podem ser compartilhados com qualquer pessoa de forma gratuita (Python é gratuito e aberto); é uma linguagem com boas características para programação científica; é uma linguagem com uma grande comunidade de usuários (inclusive na área científica); é uma linguagem de programação ‘completa’ e é mais simples (fácil) que outras linguagens desta categoria. Continue reading

Posted in Programação, Python | Leave a comment

Introdução à Programação científica em Matlab

Agora vamos utilizar o Matlab para treinar lógica de programação e aprender programação por meio de exemplos.

A primeira coisa que você deve fazer é voltar ao primeiro tutorial do Matlab (http://www.mathworks.com/demos/matlab/getting-started-with-matlab-video-tutorial.html), assistir de novo e executar todos os comandos do tutorial no seu próprio computador. Repare que na parte superior a direita da janela do tutorial tem um link para você puxar o script (no Matlab script significa o texto (com extensão .m) com os comandos a serem executados no Matlab) utilizado para rodar os exemplos do tutorial (aliás, neste script também tem o texto que o cara fala durante o tutorial, pode te ajudar a entender a fala em inglês). Continue reading

Posted in Matlab, Programação | Leave a comment

Introdução à programação científica

O computador é uma ferramenta indispensável na aquisição, armazenamento, simulação, análise e visualização de dados, típicas tarefas em experimentos científicos. Ou você utiliza um software feito integralmente para executar todas estas tarefas da exata maneira que você quer e tudo que você tem que fazer é aprender a usar este software ou você aprende a utilizar um software em que você pode detalhar, especificar, automatizar (em essência, programar) o que na verdade deseja fazer.

Programação científica é o ato de desenvolver programas de computador baseado em alguma linguagem de programação com foco na análise de dados sem se preocupar com detalhes do programa com relação aos componentes do hardware e software do computador, como interação com o sistema operacional, processador, memória, placa de vídeo, etc. Tipicamente, até mesmo a interação com o usuário é relevada (se o programa que você escreveu tem uma tela gráfica bonita ou não na maior parte das vezes nem interessa). Continue reading

Posted in Matlab, Programação, Python | Leave a comment