月別アーカイブ: 2012年3月

記述統計でてんやわんや。

ここからはしばらく記述統計でてんやわんや。

まずはattachを使って、いちいち明示($をつけなくてもよいように)しなくてもいいようにしてみた。
attach(individual)とすればいい。

このattach関数は便利なんだけどちょっと分かりにくい。
データフレームがたくさんある場合には、いちいちdetach()しないといつまでこのattachが生きているかよくわからないし、これをしていればすべてに明示が必要なくなる訳ではないので、混乱する。できれば使わないほうがいいかも。

でもまあ単純な時には便利な関数。

まずはクロス集計表をつくる。
職種ごとのsexとjobstyle、Spouse.

f:id:jigawa91:20120320225044p:image

とりあえず出た。
しかし、こういうのひっくるめてうまいことやる方法はないかなあということで、@kosugitti先生に教えてもらいました。

コマンドはこちら。
aggregate(individual[c(“sex”,”jobstyle”,”Spouse”)], list(individual$job), table)

これでまとめてできる。

f:id:jigawa91:20120320225045p:image

by関数を利用するよりもこちらのほうが良さそうですね。
ちなみに、listはまだ僕も理解してないけどjobごとにみたいなことをする場合には、いったんこれでまとめた方が認識しやすくなるみたい。

ここらへんは説明困難なので、試行錯誤といった感じかなあ。。
イメージとしては、1×1の場合は明示もいらないけど、1×3の場合は明示したりlistを使ったりする必要あると思っておけばいいかな。。

職種ごとの記述統計はこんな感じ。by関数を使う。

f:id:jigawa91:20120320225046p:image

結構詳しく出ますけど、正直こんなに必要ないよね。。

ということでこれもまとめてやってみる。平均値と標準偏差だけ。
aggregate(individual[c(“age”,”Employee”)], list(individual$job), mean,na.rm=T)
aggregate(individual[c(“age”,”Employee”)], list(individual$job), sd,na.rm=T)

f:id:jigawa91:20120320225047p:image

これを一気にやれればいいのだけど。。。
ここまでやって思う事は、記述統計については、残念ながらExcelのピポットテーブルのほうが分かりやすいな。。ということだが一応なんとかできたので少し満足。
Excelはいまいち信用できないし、よく落ちるので、直感的に操作してみてその後にRで検算するのがいいかと思っています。

忘れないようにdetach()して今日は終了。
なかなか先は長いな。。

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

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

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

写真
f:id:jigawa91:20120318215830p:image

このダミーデータは、性別、年齢、職種、勤務形態、配偶者の有無、従業員数から成っている。
この中で、カテゴリカルデータは、性別、職種、勤務形態、配偶者の有無の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”))

確認してみると、しっかりと定義づけられているみたい。
f:id:jigawa91:20120318215831p:image

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

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

f:id:jigawa91:20120318215832p:image

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

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

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

f:id:jigawa91:20120318215833p:image

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

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

f:id:jigawa91:20120318215834p:image

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

試しにsummary()を使ってみると??
f:id:jigawa91:20120318215835p:image
カテゴリカルデータは、度数で表示、数字データは平均値等が出てくる。

psychパッケージのdescribe関数を使うともう少し丁寧に出てきます。
f:id:jigawa91:20120318215836p:image
米印はカテゴリカルデータとして認識してくれているみたい。

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

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

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

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

コマンドはこちら。

individual<-law[1:6]

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

f:id:jigawa91:20120318210706p:image

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” ))

f:id:jigawa91:20120318210707p:image

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

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

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で打ち込んだデータ(ダミーデータにしています)。

f:id:jigawa91:20120317230027p:image

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

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

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

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

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

f:id:jigawa91:20120317230028p:image

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

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

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

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

f:id:jigawa91:20120317230029p:image

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

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

f:id:jigawa91:20120317230030p:image

今日はここまで。

信頼性の分析(α係数とかomega係数とか)

今日は質問紙の分析に入ろうかと思います。

まずは、質問紙の構成の確認。

f:id:jigawa91:20120324120726p:image

このダミーデータは先行研究においては3つの因子からなる15項目の質問紙。
m_1~m_5 までが第1因子、m_6~m_10が第2因子、m_11~m_15が第3因子となっている。
まずは先行研究と同様の因子構造を使用していいかどうかを検討するためにα係数を算出しよう。

コマンドは
alpha(qp[c(“m_1″,”m_2″,”m_3″,”m_4″,”m_5”)])

これで第1因子を構成する質問項目の信頼性の検討を行う。
psychパッケージの中にあるalpha関数を使うのが便利みたい。
これまた@kosugitti先生に感謝。

ちなみにpsychパッケージの使い方よく分からんのうなんて思ったらhelp(psych)をコンソールに入れるとhelpが出てきます。英語なので怖いけど、僕のように現在完了形から見失っているような英語力でも少しは理解できる単純な英語なのでビビらず見てみよう!!そこの検索窓でalphaを検索して見てみたのがこちら。

f:id:jigawa91:20120324120727p:image

結果の見方が書いてあるね~!!

ちなみに今回のデータの結果がこちら。

f:id:jigawa91:20120324120728p:image

まずピンクの所をみると、law_alphaとかあるけど、なぜか小数点第一位までしか書いてないなあ。law_alphaとstd.alphaが出てるけどこれって少数点第二位まで出ないのかしらん??

赤線の所を見ると、Reliability if an item in dropped と書いてある。
もちろん英語にはうんざりしてるが、これはその質問項目を除いた時のα係数の変化を示している(のだろう)。
ここの数値が、上にあるα係数よりも著しく大きくなるようであればちょっといかんのだ。だから今回のデータの信頼性はまあまあオッケーだなということが分かる。

紫で囲んだ所は、それぞれの質問項目の記述統計。平均も偏差も出してくれているので明らかな偏りがあればチェックでできる。

その下のとこは何なんだろう???
質問項目間の相関係数??

結果の見方はもう少し勉強しないと行けないがなんとか、信頼性の検討はできた。

このalpha係数は本来であれば因子分析をした後にやることが多いけど、先行研究がたっぷりある場合とかはこれだけでも結構説得力はあるねえ。
しかし、α係数の小数点第二位まで出ないのかしら?

蛇足ですが、@kosugittiに教えてもらったomegaについても備忘録的に記載。
参考ページはこちら。
http://d.hatena.ne.jp/kosugitti/20091224/1261643078

omega関数は、指定した因子構造と仮定してその負荷量から計算してくれるもの。

今回のデータだとこんな風に書く。
omega(qp,nfactors=3)

f:id:jigawa91:20120324120729p:image

なんか変なんでました。there in no packegeと言うのがでていれGPArotationというパッケージがインストールされていないのが問題みたい。Rではこういう事はよくあるので、焦らず、tools→installs packegeでインストールして再試行。

f:id:jigawa91:20120324120730p:image

でました。ここらへんはまだまだ勉強不足。あくまでやってみただけという感じですがなんか見た目が格好いいな。
因子分析等いろいろやった後でまたチャレンジしよう。
今日はここまで。