1 Leitura de arquivos no R
Nessa primeira parte veremos como obter arquivos externos ao R. Existem variações nos
tipos de arquivos de dados e como as respostas de questionários são inseridas neles. Serão
abordadas três situações:
-
1.
- Arquivo de dados do BILOG com dados numéricos (0/1);
-
2.
- Arquivo de dados com respostas alfanuméricas (letras);
-
3.
- Arquivo de dados com extensão .xls.
1.1 Arquivo do BILOG
Inicialmente, vamos utilizar o arquivo de dados disponível no software BILOG:
EXAMPL01.DAT.
Esse arquivo possui a seguinte estrutura:
1 242311431435242
2 243323413213131
3 142212441212312
4 341211323253521
5 343321411213113
6 341232413211114
Leitura do Arquivo no R:
> dados<-read.fwf('http://www.ufpr.br/~aanjos/TRI/dados/EXAMPL01.DAT',w=c(4,1,rep(1,15)))
Para eliminar a coluna vazia basta fazer:
> dados<-read.fwf('http://www.ufpr.br/~aanjos/TRI/dados/EXAMPL01.DAT',w=c(4,1,rep(1,15)))[,-2]
> head(dados)
V1 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17
1 1 2 4 2 3 1 1 4 3 1 4 3 5 2 4 2
2 2 2 4 3 3 2 3 4 1 3 2 1 3 1 3 1
3 3 1 4 2 2 1 2 4 4 1 2 1 2 3 1 2
4 4 3 4 1 2 1 1 3 2 3 2 5 3 5 2 1
5 5 3 4 3 3 2 1 4 1 1 2 1 3 1 1 3
6 6 3 4 1 2 3 2 4 1 3 2 1 1 1 1 4
O gabarito pode ser obtido de maneira semelhante:
> gab01<-read.fwf('http://www.ufpr.br/~aanjos/TRI/dados/EXAMPL01.KEY',w=c(3,2,rep(1,15)))[,-2]
> gab01
V1 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17
1 KEY 3 4 1 4 2 1 3 2 3 4 4 1 4 1 3
As respostas podem ser recodificadas utilizando utilizando-se a função mult.choice()
do pacote ltm:
Primeiro deve-se carregar o pacote ltm:
A função mult.choice() exige que o objeto que contém as resposta seja um vetro
numérico. Na leitura do arquivo, a classe de gab01 é data.frame, portanto, eve-se
transformar esse objeto pra numérico. Ainda, no objeto que contém os dados a primeira
coluna é o identificador. Logo, essa coluna não deve ser utilizada.
A recodificação dos dados pode ser realizada da seguinte forma:
> dados.resp<-mult.choice(dados[,2:16],as.numeric(gab01[,-1]))
Agora o objeto dados.resp contém dados na forma 0/1 que é o tipo de objeto
requerido para a maioria das funções para análises em Teoria da Resposta ao Item com os
pacotes do R.
V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17
[1,] 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0
[2,] 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0
[3,] 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0
[4,] 1 1 1 0 0 1 1 1 1 0 0 0 0 0 0
[5,] 1 1 0 0 1 1 0 0 0 0 0 0 0 1 1
[6,] 1 1 1 0 0 0 0 0 1 0 0 1 0 1 0
1.2 Leitura de dados - SARESP -
O arquivo com os dados está disponível com os seguintes comandos:
> saresp<-read.fwf('http://www.ufpr.br/~aanjos/TRI/dados/manha.dat',widths=c(12,3,rep(1,31)),header=FALSE,skip=1,na.strings=' ')[,-3]
> colnames(saresp)<-c('id','turno',paste('i',1:30,sep=""))
Para ver os dados desse objeto digite:
> head(saresp)
> class(saresp)
O gabarito pode ser obtido de maneira semelhante:
> gabarito<-read.fwf('http://www.ufpr.br/~aanjos/TRI/dados/manha.dat',widths=c(-16,rep(1,30)),header=F,nr=1,na.string="")
> gabarito
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16
1 A B D C A A B C D C A A D B D D
V17 V18 V19 V20 V21 V22 V23 V24 V25 V26 V27 V28 V29 V30
1 A B D D D C D C A D A D B C
Observe que as respostas e também o gabarito foram fornecidos em modo
literal (letras). No R as principais funções conhecidas para análise de dados da
TRI requerem que as respostas estejam em um objeto do tipo data.frame ou
matrix com números 0 e 1 (0 indica uma resposta incorreta e 1 uma resposta
correta).
No pacote Deducer há uma função chamada recode.variables() que pode ser
utilizada para converter as respostas literais em números.
Para instalar opacote utilize o comando install.packages('Deducer')
.
Para obter o pacote utilize:
A recodificação pode ser realizada da seguinte maneira:
> dados<-recode.variables(saresp,"'A'->1; 'B'->2; 'C'->3; 'D'->4")
Observe, que por opção, foi criado um novo objeto chamado dados. Utilize a função
head para ver uma parte dos dados. Na recodificação não são mantidos os nomes das colunas
do arquivo original. Por isso, utiliza-se a função names() para recolocar os nomes das
colunas.
> names(dados)<-names(saresp) # colocar os nomes do arquivo original
Também, é necessário recodificar o gabarito:
> gab2<-recode.variables(gabarito,"'A'->1; 'B'->2; 'C'->3; 'D'->4")
Observe que no objeto dados as respostas estão codificadas com os valores 1,2,3 e 4. No
pacote ltm há uma função chamada multi.choice() que transforma as respotas em 0 ou 1
de acordo com o gabarito.
O objeto manha contém as respostas numéricas no formato 0 e 1.
> manha.NA<-mult.choice(dados[,3:32],as.numeric(gab2)) #ltm
i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 i11 i12 i13 i14 i15 i16
[1,] 1 0 1 1 1 1 0 0 1 0 1 0 1 0 0 0
[2,] 0 1 0 1 1 1 0 0 0 0 1 0 1 1 0 0
[3,] 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1
[4,] 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 1
[5,] 0 1 1 1 1 0 0 0 0 0 1 0 1 1 1 0
[6,] 0 0 0 1 1 1 0 0 0 0 1 1 0 1 0 0
i17 i18 i19 i20 i21 i22 i23 i24 i25 i26 i27 i28 i29
[1,] 1 1 0 0 0 0 1 1 0 0 1 1 1
[2,] 1 1 1 1 0 1 0 0 0 1 1 1 1
[3,] 1 1 1 0 1 1 1 0 1 1 1 0 1
[4,] 0 1 0 0 0 1 0 1 0 0 1 0 0
[5,] 0 0 0 1 1 0 0 0 0 0 1 0 1
[6,] 0 1 1 1 1 0 0 0 0 0 1 0 1
i30
[1,] 1
[2,] 1
[3,] 1
[4,] 0
[5,] 0
[6,] 1
1.3 Ausência de respostas
Observe que nesse conjunto de respostas existem ’missings’ ou ’NA’s’. Alguns pacotes
conseguem realizar a estimação dos parâmetros considerando os ’missings’ no arquivo de
respostas. Quando um pacote não permite ’NA’ as respostas faltantes devem ser codificadas
como uma resposta incorreta.
No R pode-se recodificar os ’NA’s’ da seguinte maneira:
> manha<-ifelse(is.na(manha.NA)==T,0,manha.NA)
Nas análises seguintes será considerado o conjunto de respostas sem NA’s.
1.4 Leitura de dados a partir de uma planilha
So os dados estiverem em uma planilha, por exemplo, com a extensão .xls, pode-se utilizar
o pacote gdata para leitura de dados.
Vamos carregr os dados de Satisfação (Disponível na página da disciplina
TRI).
Primeiro é necessário carregar o pacote gdata (instale do site do R se necessário).
Obtendo o arquivo:
> satisf<-read.xls('http://www.ufpr.br/~aanjos/TRI/dados/DadossatisfacaoSil.xls')
> head(satisf)
id.item X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14
1 1 1 1 1 1 1 1 0 0 1 0 1 1 0 1
2 2 1 1 1 1 1 1 0 1 1 1 1 1 1 1
3 3 1 1 1 1 1 0 1 1 1 1 1 1 0 0
4 4 0 0 1 1 1 1 1 1 1 1 0 1 1 1
5 5 1 1 1 1 1 1 0 1 1 1 1 1 0 1
6 6 1 1 1 1 1 1 0 1 1 1 1 1 1 1
X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28
1 0 0 0 0 0 0 0 0 0 0 1 1 1 0
2 0 1 1 1 1 0 0 0 1 1 1 1 1 1
3 0 1 0 0 1 1 0 1 1 1 1 1 1 0
4 1 1 1 1 1 0 1 1 1 1 1 1 1 0
5 1 1 0 0 1 0 0 1 1 1 0 0 0 1
6 1 1 0 1 1 0 1 1 1 1 1 1 1 1
X29 X30 X31 X32 X33 X34 X35
1 1 0 1 1 1 1 1
2 1 1 1 1 1 1 1
3 1 0 1 1 1 1 1
4 0 0 1 1 1 1 1
5 0 1 1 1 1 1 1
6 1 1 1 1 1 1 1
Observe que existem NA’s nesse conjunto de observações.
1.5 Ler arquivos do SPSS
A função read.spss() do pacote foreign pode ser utilizada para leitura de arquivos do
SPSS.
Para ler o arquico Soldi utilize a função da seguinte maneira:
> soldi<-read.spss('/home/adilson/Área de Trabalho/RTRI/dados/Soldi.sav',to.data.frame=T)
> head(soldi)
Id Afeti_1 Afeti_2 Afeti_3 Afeti_4 Afeti_5 Afeti_6 Inst_1
1 1 0 0 0 0 0 0 1
2 2 0 1 0 0 1 0 1
3 3 0 1 0 0 0 0 0
4 4 0 0 0 0 0 0 1
5 5 1 1 0 0 0 1 0
6 6 0 0 0 0 0 0 1
Inst_2 Inst_3 Inst_4 Inst_5 Inst_6 Norm_1 Norm_2 Norm_3
1 0 0 1 1 1 0 0 0
2 1 0 1 1 1 1 1 1
3 0 0 1 0 1 0 1 1
4 0 1 1 0 0 0 1 1
5 1 0 0 1 0 0 1 1
6 1 1 1 1 1 0 1 1
Norm_4 Norm_5 Norm_6
1 0 0 0
2 0 1 0
3 0 0 0
4 1 1 0
5 1 1 1
6 0 1 0
1.6 Exercício
Ler no R os dados do questionário sobre Altura que estão disponíveis no seguinte
endereço:
http://www.ufpr.br/~aanjos/TRI/dados/altura211.dat.