お引っ越し。

レンタルサーバーを借りて、独自ドメインを取得してWordpressにもチャレンジしてみました。

やればできるもんだねー。

はてなダイアリーからエクスポートした時にはテキストファイルだったので画像はあきらめていたんだけど、なぜかきれいに引っ越しできた。

これって画像ははてなのフォルダに探しにいってるいるのかもしれませんなあ。

とりいそぎこれからもよろしくお願いします。

 

 

 

Google アラートの使い方

お久しぶりの更新。

Rは最近階層的重回帰分析にチャレンジしてるんだけど、なかなかアップする元気がないので、今回は別の話題。

今日はgoogleアラートの使い方について紹介。

皆さん、最新の文献はどのようにチェックしてますか?
僕は、RSSリーダーとgoogleアラートを利用しています。

RSSリーダーを使う方法も結構便利で、CiNIでもPsychoinfoでも自分の興味分野をフィードに登録するだけ。でもこの方法はちょっと面倒なのと、遊びのリーダーの中に急に英語論文来ると心が痛いので違う方法を。。

今回はgoogle scholar を利用したやり方を紹介します。とある先生に教えてもらったものなので完全にパクリネタですが。。

多分、ほとんどの人は一度はgmailアカウントは取ったことがあると思うのでアカウントの取り方は省略します。

まずは、googleアカウントにログインした状態でgoogle スカラーに飛びます。
http://scholar.google.co.jp/

f:id:jigawa91:20121023215322p:image

こんな感じになります。右上のアラートをクリック。

f:id:jigawa91:20121023215324p:image
するとアラートを作成する画面になるので、届けたいメールアドレスとキーワードを入力。

最終画面はこんな感じ。僕はburnoutを入れてみました。
f:id:jigawa91:20121023215320p:image

f:id:jigawa91:20121023215325p:image
こんな感じで、メールが来ます。

burnoutをキーワードにすると、だいたい毎日4件位は新着メールが来ます。
ドイツ語とかフランス語とかも混じってるけどabstractを読むだけでもちょっと研究した気持ちになりますねー。メールで強制的に来るのがいい感じ。

良かったら参考にしてください。

anobakun使ってみる(被験者間2要因3水準の分散分析)

では、気を取り直して、次回は被験者間、2要因3水準の分散分析にチャレンジしてみます。

まずはデータセットから。前回のデータをちょっとリミックスして、性別(male, female),
職種(Dr, Ns, CP), mscoreの3変数からなるデータセットを作ります。

anova2<-data.frame(anova$sex,anova$job,anova$mscore)

str()で構造を確認。これはデータセットを作った時は必ずやるようにする。
結構いままで単純なミスで苦労してきたので細かいチェックをしておけばあとあと便利なんだよね。

f:id:jigawa91:20120527220758p:image

ここでは性別をfactorにすることを忘れていた。

やれやれ。
anova$sex<-factor(anova$sex,levels=0:1,labels=c(“male”,”female”))
を追加。

さて、いよいよここから2×3の被験者間分散分析をしてみます。
ダミーデータのmscoreを従属変数、性別、職種を独立変数としての分析です。
ちなみに前回のデータだと結果がでなかったので少し数値を変更しています。

view(anova2) でデータセットを確認してみましょう。

f:id:jigawa91:20120527220805p:image

修正の前の画像なのでですが、この場合は従属変数を一番最後にする。そして、性別(要因A)、職種(要因B)を並べておくのがanovakunのポイント。
新しくデータセットを作らないといけないのがRの大変なところ。まあ慣れないと。

要因がAとBだから

anovakun(anova2,”ABs”,2,3)
2と3は水準数だよね。

anovakunのいいところは、多重比較が充実していることです。

主な効果が有意だった場合、デフォルトではShaffer法を使って多重比較をしてくれます。

オプションだと、holm = Tで修正版bonferroniが使えます。

詳細は井関先生のページを見るのが一番ですかね。

また、peta = Tとすることで,分散分析表に偏イータ二乗(partial eta squared)が追加されます。

今回のデータで多重比較は修正bonferrroni法、効果量を算出しようと思ったら、anovakun(anova2,”ABs”,2,3,holm = T,peta = T)
こんな感じのコマンドを書くのです~

f:id:jigawa91:20120527220820p:image

イータのところは長くなってしまって見にくいので注意が必要ですね~

僕は被験者間の調査ばかりなので、使った事はありませんが被験者内の球面性検定のオプションもつけることができます。

きょうはここまで。

いやー統計はほんと難しいぞ。まさしく七転八倒。

anovakunを使ってみる(1元配置の分散分析)

続いてanovakunを実際に使ってみようと思います。

とりあえずは一元配置の分散分析ということで前回の続きデータを使ってみます。

っと思ったら前回のデータは1要因2水準だからt検定とおなじじゃん。。。
だけどまあいっか。。

まずは、井関先生のページに行ってanovakunをゲットする。
http://www11.atpages.jp/~riseki/pukiwikiplus/index.php?ANOVA%B7%AF

ダウンロードしたテキストファイルをRのディレクトリに入れておきます。

こんな感じになっていれば大丈夫。

f:id:jigawa91:20120527175930p:image

続いて、edit→sourceといくとダイアルログが出てくるので、さきほどのテキストファイルを選択します。

すると。。

f:id:jigawa91:20120527175931p:image

??なんじゃそら??
以下にエラー make.names(col.names, unique = TRUE) :
1 は不正なマルチバイト文字です

よく井関先生のページを見てみると、どうやらMacの場合には文字コードを変更しておく必要があるみたい。確かに、Rstudioで開いても明らかに変だもんね。。

f:id:jigawa91:20120527175932p:image

その後もいろいろと四苦八苦したんだけど、RstudioのEdit →source からはなんかうまくできない(たぶんやり方が間違っているだと思うのでだれか知ってたら教えて)。

仕方がないので明示しました。
source(“/Users/☆/Dropbox/R/anovakun_420.txt”)
※ ☆はユーザー名、別に隠さなくてもいいけど。。

f:id:jigawa91:20120527175933p:image

見てみるとWorkspaceのところになんかそれっぽいものが入ってるのが分かります。
イイネ! ここの警告は無視して大丈夫。

ふう。

さていよいよ分散分析を開始。

anovakunの使い方は井関先生のページを見るとほとんどの人は分かるとは思うんですが、僕は結構苦労したのでメモしておきます。

anovakunの使い方は
anovakun(データ, “要因計画の型”, 各要因の水準数,…)
という形です。

僕が苦労したのは要因計画の型という部分。
ページの説明では、
「要因計画「分析したい計画の型を入力します。「A」~「Z」を各要因を表すラベル,「s」を被験者のラベルとします。被験者間要因は「s」の左側,被験者内要因は 「s」の右側に配置します。この表記法にしたがえば,例えば,2要因の被験者間計画は「ABs」,3要因の被験者内計画は「sABC」,2つの被験者間要 因と1つの被験者内要因を持つ混合要因計画は「ABsC」と表せます。なお,要因計画の型は「”"」で囲む形で入力する必要があります。

となっています。

ここで書いてあるABsCというのは、A要因、B要因、C要因まで使えてそれぞれ被験者内計画、被験者間計画で使い分けるという意味だそうです。

今までのRの使い方だと、ここのABの部分に自分でつけた変数を入れていたのだけどanovakunの場合はこのまま使います。

今回のケースだと、職種の1要因なのでA、そして被験者間要因なのでsの左側に配置。

anovakun(anova1,”As”,2)

こんな感じです。
僕は最初は、anovakun(anova1,”sexs”みたいな感じで実際の変数名を入れようとしてドツボにはまりました。

ではとりあえず入れてみます。

f:id:jigawa91:20120527175934p:image

こんな感じで結果が算出されました。
赤線の所を見るとa1、a2 と出てきているのが分かります。僕の場合はここのnの数を調べて確認しました。
a1は、Dr、a2は、Nsということです。

ふう今回はnsだったので職種の主効果はなし。

!!
というか、一元配置の分散分析で2水準って普通にt検定じゃん。。。
ダミーデータの作り方がおかしかった。。

せっかくなので、t検定してp値の確認してみました。

t.test(anova1$mscore~anova1$job,var.equal=TRUE)

f:id:jigawa91:20120527175935p:image

うん(たぶん)合ってると思う。基本的にまだ分かってないんだけどt値とF値は違ってもいいだよね。。。このブログを信用してはだめですよ~。

気を取り直して、次回は被験者間、2要因3水準の分散分析にチャレンジしてみます。

anovakun使ってみる(データセット編)

久しぶりの更新。
今日は、anovakunの使い方についてのメモ。いつもの事ながらKosugitti先生に感謝。いろいろと復習しながら七転八倒します。

まずは、File→New→R scriptで新しいコマンドを用意。
今回はsave as anova.Rとしてみました。

f:id:jigawa91:20120525200815p:image

さて復習がてらデータの読み込み。

anova <- read.csv(file.choose(),head=T,sep=”,”,na.strings=”NA”)

今回のデータもブログ用のダミーデータです。
まずは変数と構造の確認
names(anova)
str(anova)
f:id:jigawa91:20120525200816p:image

いい感じです。ちなみにintというのは、数字データということ。
sex, age, job, jobposition, workinghourは個人属性で残りのM1~M6はちょっとした質問紙の質問項目のデータです。

さて、復習がてら個人属性の変数を加工します。
anova$sex<-factor(anova$sex,levels=0:1,labels=c(“male”,”female”))
#性別をカテゴリカルデータとして定義。maleとfemale

anova$job<-factor(anova$job,levels=0:2、labels=c(“Dr”,”Ns”,”CP”))
#職種を定義付け。今回は医師と看護師と心理士という名前にしてみました。

本当は他のvariablesも定義付けする必要があるけど、今日使うのこれだけなので置いておきます。

出来たかどうか確認。できてるみたいです。

f:id:jigawa91:20120525200818p:image

定義付けしたsexとjobに注目すると、int形式ではなく、Factorになっています。
w/ の後は水準数ですね。

とりあえず、質問紙の得点を従属変数、job(あえてDrとNsだけを使ってみる)を独立変数とした一元配置の分散分析を行おうと思うのでまずは質問紙の得点を算出(今回は適当に合算してます)

anova$mscore<-anova$M1+anova$M2+anova$M3+anova$M4+anova$M5+anova$M6)

続いてこれだけからなるデータセットを作成。
anova1<-subset(anova,job==”Ns”|job==”Dr”,select=c(job,mscore))

subset 関数を使えば使いたい水準を減らしたり、variablesを限定したデータセットを作るのも簡単簡単です。
ちなみに「|」はandというような意味でとらえればいいと思います。
もしたくさん水準があって1つの水準だけ減らしたい時は、「!=」とすれば~以外というような使い方もできるそうです。

ただ、subsetを使って水準数を減らした時には注意が必要です。
ためしにちょっとstr()を使って構造を確認。view()でデータを右上に表示しています。

f:id:jigawa91:20120525200819p:image

なんとsubsetを使って水準を減らした場合には、実際にはデータはないのに構造上は水準が減りません。このままだとanovakunではエラーが出てしまいます。

だからもう一度factor型にチェンジ。

anova1$job<-factor(anova1$job)
これでもう一度構造を確認。
str(anova1)

f:id:jigawa91:20120525200820p:image

はい、さっきは3水準のままだったのが2水準になりました。これは結構注意がいりそうですね。

これでデータセットは完了です。

今回七転八倒して分かったことは、なにか困った時にはstr()を使って構造を確認すること。エラーが出る時はこの型がうまくいっていないことが多いということですかね。。

とりあえず今回はここまで。
次回は、実際にanovakunを使ってみようと思います。

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

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

まずは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

今日はここまで。