順序変数とか、カテゴリカルデータとか。。

さて、ここからは個人属性をどのようにいじったらよいかを七転八倒しよう。

まずは、Workspaceの中のindividualをクリックして変数を確認。

写真

このダミーデータは、性別、年齢、職種、勤務形態、配偶者の有無、従業員数から成っている。
この中で、カテゴリカルデータは、性別、職種、勤務形態、配偶者の有無の4つ。

まずは、性別を入力。
カテゴリカルデータの定義付けは前のエントリでやっています。
http://d.hatena.ne.jp/jigawa91/20110507/1304748056

今回も性別と配偶者はざっくりとうまくいきました。
コマンドはこちら。
individual$sex<-factor(individual$sex,levels=0:1,labels=c("male","female"))
individual$Spouse<-factor(individual$Spouse,levels=0:1,labels=c("nothing","exisit"))

確認してみると、しっかりと定義づけられているみたい。

ちょっと悩んだのは、職種。今回のダミーデータでは、1が営業、2が技術、3が事務というように分類していたのだけど、1から始める場合には、labelsのところを省略しないとうまくいきませんでした。(@kosugitti先生に感謝)

コマンドはこちら。
individual$job<-factor(individual$job,labels=c("Operating","Engineering","Clerical"))
#レベルが1から順にはじまっていたら,lebels=1:3は省略可能。職種。

これもうまくいきました。

勤務形態については、0、日勤のみ、1まれに夜勤、2、2交代、3、3交代 これらはしんどさの度合いで順序付けしているけど、等間隔ではないので、順序尺度として定義しました。

コマンドはこちら。
individual$jobstyle<-factor(individual$jobstyle,levels=0:3,labels=c("daywork","rarenightwork","twoshifts","threeshift"),ordered=TRUE)
#勤務体系。順序変数(夜勤負担が大きい順番)として定義。

これもなんとなくうまく行ってるような気がする。。

っということで、確認のためにstr()を使ってみる。
これは、SPSSでいうデータの型が分かる関数。


factorはカテゴリカルデータ、intは数字データ、Ord.factorは順序変数になっていると確認することができた。

試しにsummary()を使ってみると??

カテゴリカルデータは、度数で表示、数字データは平均値等が出てくる。



psychパッケージのdescribe関数を使うともう少し丁寧に出てきます。

米印はカテゴリカルデータとして認識してくれているみたい。

ここまで済んで、Workspaceのデータフレームをクリックすると、ここもうまくいっているみたい。


今日はここまで。飲みながらなので誤字があったら指摘してください。。

データをきれいにしましょう1

前回のデータに引き続いて、まずは年齢とか、職業などの個人属性と質問紙を分けてそれぞれデータフレームにしてみよう。

コマンドはこちら。

individual<-law[1:6]

中括弧を使って変数を指定することで、1〜6列目までを含んだデータフレームを作ったことになる。これでindividualという名前の個人属性が入ったデータフレームができた。

Workspaceを確認。individualというデータフレームができました!


同じように質問紙も
qp<-law[7:22] とするのが簡単だけど、こういうデータフレームを作るときに毎回連続しているとは限らないので、selectを使った方法を紹介。

qp<-subset(law,select=c("m_1", "m_2", "m_3", "m_4","m_5" ,"m_6","m_7","m_8","m_9","m_10","m_11","m_12","m_13","m_14","m_15" ))

これでqpという名前で15の質問項目で構成された質問紙のデータフレームができた。

※こんな風に名前を明示するときには、names関数を使ってコピペしちゃうのもいいかも。

names(individual)でデータフレームの変数が表示されます。Rstudioを使っているとあまりないけど、データフレームがなにがなんやら分からなくなったときにはとりあえずnamesをしてみれば戻って来れます。


それ以外にも、[1:5,7:9]だったら、1〜5列目の変数と7〜9列目の変数を選ぶこともできるみたい。

[ ]と( )の違いははっきりはわからないんだけど、[ ]は列を示すという感じで覚えておけばとりあえずはなんとかなるんじゃないかと思います。cはまとまりとして認識させるものと思っていればいいかな。

今日はここまで。
次回はカテゴリカルデータを定義して、summaryとdescribeをしてみようと思います。

不正なマルチバイト文字

最近になってから、Rへの情熱が復活してきたので、とりあえずSPSSで分析した修士論文のデータをRを使って検算した。
っと一言で言ってみたけれども、実際には1月くらいは七転八倒していた。

twitter上でつぶやいているといろいろな人の協力を得られるもので、@kosugitti先生にはわざわざ時間を取ってもらったり、@boz_takemura 先生 にはコードを送ってもらったり。

ありがたやありがたや。。。

受けた恩は後進に返さなきゃ(ペイフォワード!!)ということで、検算の過程で悩んだり、七転八倒した所をできるだけ素人目線でメモしておこうと思います。たくさんあるので小出しにしていきます。


まずは、ちょっと昔のエントリにも書いたけど不正なマルチバイト文字について
http://d.hatena.ne.jp/jigawa91/20110531/1306849846

前回はshift-jisモードで読み込むという方法を取ったのだけど、どうやらその方法はあまりよろしくないみたいです。本来であればUTF-8という文字形式で保存したほうがいいらしい。

まあここは「みたい」とか「らしい」でしかないのですが。。。

ただ、僕はExcelでデータを打ち込んでしまっていているし、どこが不正なマルチバイト文字なのかよくわかんねえよ。。。ということで、方法を探ってみました。

おそらくとんでもなく迂遠な方法だと思うので、もっと簡単な方法を知っている人がいれば教えてもらいたいもんです。

まずは、これがExcelで打ち込んだデータ(ダミーデータにしています)。

ここから、まずファイル→名前をつけて保存→タブ区切りテキスト

という形式で保存して、とりあえずtxtファイルを作成。

そしてそのtxtファイルをエディタで開いて(僕の場合はJeditX)、上書き保存時にUTF-8で保存する。

ここから、txtのデータをタブ区切りで読み込むようにRに命令。
law <- read.table("blog1.txt",head=T,sep=",",na.strings="NA")

※ちなみに、na.strings="NA" は欠損値をNAとするという意味です。
僕は最初欠損値を ANと間違えて書いていたおかげで文字データと数字データがわけわからん事になってましたww気をつけましょう。。

うん、間違いなく間違ってるな。。たぶんタブ区切りって言うのがうまく伝わってない。。。

まあ今までRでデータ読み込む時には、csvだったのでさっきのtxtをExcelでもう一度読み込んでcsv で保存し直してみよう。このやり方は、エディタによってはタブを,で置換してcsvにするとかちょっと面倒なことも必要でしたがまあなんとか。。。


どうだーー!!
law <- read.csv(file.choose(),head=T,sep=",",na.strings="NA")

できた!!ちなみにfile.choose()は、@kosugitti 先生に教えてもらった関数で便利です。

赤線の部分に注目。しっかりとデータフレームが読み込めたことが分かる。
lawというデータフレームの中に、373のオブジェクト(ここではn)と21のvariables(ここでは変数)が入っていると確認。

Rstudioを使えば(デフォルトと配置を変えてるけど)、もとのデータを簡単に見る事もできる。
クリックすれば自動でview()が発動するので、非常に簡単です。

今日はここまで。

attach 関数とカテゴリカルデータの定義付け

しばらくお休みをしていましたが、また復活しました。

備忘録的にメモ。
ちょっと前にattach()をあきらめていたのだけれども、データセットをする前にattach()を使うとなんだかよくわからないことになるので、すべてのデータセットとカテゴリカルデータや順序尺度を定義づけてしまってから使うと便利になる。

その後のデータフレームを使いする時も同様だと思うので注意。

あとshift-Jisで読み込むのもやめておく。
UTF-8で保存がいいみたい。

詳細は落ち着いたら画像付きでアップする予定。

psych パッケージの利用。

先週の日曜日にHiRoshimaRというRの勉強会があってとても勉強になった。

今日はそこで@kosugitti 先生が紹介してくれた心理学者のためのパッケージを丁寧に七転八倒することにした。


まずは、パッケージのインストールから。
Tool →Install Packeges..といくとこんな画面になる。

またしても英語でちょっとイライラするが負けられない。

二行目の空欄のとこに"psych"と入力。
多分純正のRだといろいろ選べるみたいなのだが、しばらくはこのRstudioを使うので気にせずに行こう。

ちなみに3行目は、そのパッケージの保存場所。デフォルトではユーザー名/Library/R/2.13(バージョン名)/Library となっている。
作業ディレクトリに変更してもいいとは思うんだけど、まあデフォルトのしておこう。


実行するとこんな感じ。ほんとにインストールできてるのか確認。

よしどうやら入ってるみたい。

続いてこのパッケージを読み込むためのコマンド。
ちゃんと聞いて来たもんね。

library(psych)

これで、インストールしたpsychパッケージを読み出せる。

これを前回のデータの頭に入れてみる。ちょっと面倒なので、カテゴリカルデータの定義付けの部分は無視してみてみる。
library(psych)
#インストールしたパッケージを読みこみますよ。
lowdate1<-file("nslpns.csv",encoding="Shift-JIS")
lowdate2<-read.csv(lowdate1,header=T,sep=',')
lowdate2$sex<-factor(lowdate2$sex,levels=0:1,labels=c("male","female"))
lowdate2$job<-factor(lowdate2$job,levels=0:1,labels=c("ns","lpns"))
lowdate2$jobposition<-factor(lowdate2$jobposition,levels=0:2,labels=c("highexecutive","executive","stuff"))
lowdate2$workingform<-factor(lowdate2$workingform,levels=0:4,labels=c("day","2alternation","3alternation","unusual","parttime"))
#ここまででカテゴリー変数の定義完了。

この次に勉強会で習ったdescribe関数をいれる。この関数は簡単に言うと、グレードアップしたsummary関数という感じ。
とりあえず、年齢を入れてみよう。

describe(lowdate2$age)

よしできた。ちなみにパッケージを入れていないRでdescribe()って打ち込んでも「関数が見つからない」と返ってきます。パッケージには他にもいろいろあるみたいなのだが、とりあえずこのpsychのパッケージには心理系の分析に便利な関数がいろいろあるみたいなので、しばらくこのままのデータで練習してみようと思います。!

次回やること
1) describe.by
2) corr.test
3) multi.hist

ここまで追ってみよっと。
因子分析はもっと簡単なデータで改めてやることにしよっと。

不正なマルチバイト文字に七転八倒した。

分散分析までなんとかかんとかできるようになったので、本格的に自分の研究のデータを分析しようと思ったのだ。

本当は時間がないのでSPSSを使おうとしたのだけど、N先生から
"逃げ場を無くせ!!"との激。

ちなみにN先生は、ヒゲ付き棒グラフを美しく仕上げるために七転八倒している。

よーーしわかったよ。やるぜ!!

ということで、データを読み込むところから始める。

データの概要は、

だいたい300人分のデータで看護師さんと准看護師さんのデータ。
前半部は、年齢、性別、勤務形態などのデモグラフィックデータで後半部は3つの質問紙の質問項目のスコア。
ファイルは、nslpnsとしてcsv方式で保存(もちろん作業ディレクトリに)

これを読み込んだら、subset関数などを使ってソートを掛けながら少しずづ分析に向けて進めていくのだ。

エクセルで変数名を分かりやすく形成して、よし読み込むのみ。

Rでやれば、あとからどんなふうにデータを形成したのかがよくわかるのだ。

まずはRstudioを開いて、file→new→Rscript でエディタを開く。

今回は、看護師と准看護師さんのデータなので、nslpnsと名前をつけとこう。

エディタの左上のフロッピーマークをクリック。

こんな感じのが出てくるのでファイル名を付けて保存。
この時にwhereの部分をRの作業ディレクトリに変えておくのを忘れちゃだめ。


フフ。コマンドをエディタにいれてみる。
データの読取はもう出来るもんね。

s<- read.csv("nslpns.csv",header=T,sep=',')

!!

なんだよ。不正なマルチバイト文字って。


この後、約3時間ほどマルチバイト文字と戦う。

txt方式で読み込もうとしたり、csvデータをいじってみたり。


よくわかんないが、マルチバイト文字という奴は文字形式の問題らしいが、元データはきっちりしてるつもりなんだけどな。。。
UTFとshift JISの問題だとかなんとかようわからんので誰か教えてください。


いろいろ四苦八苦して、新たなコードをネット上で見つける。一応これで読み込めた。

lowdate1<-file("nslpns.csv",encoding="Shift-JIS")
lowdate2<-read.csv(lowdate1,,header=T,sep=',')

よくわかってないけど、たぶん一行目はcsvを読み込むときにShiftJISで読み込んでねということみたい。

膨大な量のデータなので、どっかで間違えて邪悪な文字を使ってしまってだんだろう。

ふう。燃え尽きた。続きはまた今度にしよう。

二元配置の分散分析

そうそう。今日は二元配置の分散分析にチャレンジ。
おっと対応はありませんね。

Rstdioを使ったことでずいぶん直感的な使い方ができるようになった。

二元配置の分散分析のコマンドは、summary(aov(s$weight~s$race*s$sex))

従属変数が最初で~でつないで*で交互にみたいな感じかな。
この*は:でもいいらしいがまあこのままで。


Rstudioのスクリーンショットを見てみる。

右上のエディタで作った二元配置の分散分析.Rを左上のコンソールに読み込んだ形式になる(RunAll)。

読み込むと左下ワークスペース(黒い円の部分)にデータフレームがセットされてる。

ここではコマンド1行目のs(いわゆるローデータ)とコマンド7目のs2(分散分析の結果)がデータセットされていると考えたらいいのだろう。


この読み込んだデータフレームは、保存をするとずっとそのままになる。
コンソールの消去は、とりあえず机の上を片付けるようなものだけど、ワークスペースの消去は頭の中をリセットする様なものかな。


ところで、結果だが、p値を見ると、このデータではsexのみが有意。

だから、体重に関しては性の主効果は有意、人種の主効果、及び交互作用はなしという見方になる。

酔っ払っているので今日はここまで。

ちょっとanobakun http://www11.atpages.jp/~riseki/pukiwikiplus/index.php?ANOVA%B7%AF

をやってみたのだけど、これは詳しい人が作成したプログラムを読み込むタイプなのでまた別カテゴリーでやってみます。

自分でできないことだけど、理解しつつやろうと思う今日この頃。
奥が深いな。