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:

  > library(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.

  > head(dados.resp)

       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

  > class(gabarito)

  [1] "data.frame"

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') 1.

Para obter o pacote utilize:

  > require(Deducer)

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.

  > require(ltm)

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
  > head(manha.NA)
       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).

  > require(gdata)

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.