多変量解析_01_イントロダクション

179 Views

February 05, 25

スライド概要

神戸大学経営学研究科で2022年度より担当している「統計的方法論特殊研究(多変量解析)」の講義資料「01_イントロダクション」です。導入として,心理尺度データを分析することの難しさについて説明しています。また,講義準備としてRのインストールから基本操作を解説しています。

profile-image

神戸大学経営学研究科准教授 分寺杏介(ぶんじ・きょうすけ)です。 主に心理学的な測定・教育測定に関する研究を行っています。 講義資料や学会発表のスライドを公開していきます。 ※スライドに誤りを見つけた方は,炎上させずにこっそりお伝えいただけると幸いです。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

1.2 心理尺度の難しいところ 1 Chapter 1 イントロダクション 本講義が扱う「心理尺度」のデータの難しさについて導入的に紹介しています。また,R の基本 中の基本の説明をしています。 本資料は,神戸大学経営学研究科で 2022 年度より担当している「統計的方法論特殊研究(多 変量解析) 」の講義資料です。CC BY-NC 4.0 ライセンスの下に提供されています。 作成者連絡先 神戸大学大学院経営学研究科 分寺杏介(ぶんじ・きょうすけ) mail: [email protected] website: https://www2.kobe-u.ac.jp/~bunji/ 1.1 シラバス確認 (公開版では省略しています。 ) 1.2 心理尺度の難しいところ 本講義では,心理尺度と呼ばれるような人の心の内面を自己申告で回答する形式の質問によっ て得られたデータを主に分析するための手法について解説していきます。本編に入る前に、そも そもなぜ心理尺度で集めたデータの分析が厄介なのかをお話しておきましょう。ここでは、ワー クエンゲージメントの測定を例に見てみます*1 。 *1 といっても、この尺度の背景に詳しいわけではないので、もし気になる方は元論文を辿ってみてください。ある いは詳しい方がいればこっそり補足・訂正をしてもらえると助かります。

2.

1.2 心理尺度の難しいところ ワークエンゲージメント測定の(簡単な)歴史 ワークエンゲージメントは、もともとバーンアウトの対極にあるものとして考えられていたよ うです。そのバーンアウトを測定する尺度としては、Maslach-Burnout Inventory(MBI: Maslach & Jackson, 1981)というものがあります。この尺度は情緒的消耗 (emotional exhaustion)、脱人 格化 (depersonalization)、個人的達成感の低下 (lack of personal accomplishment) の 3 つの構 成概念を測定しようとしたものです。この 3 つの構成概念からもなんとなく分かるように、MBI は人と関わるタイプの職業におけるバーンアウトを測定するために開発された尺度でした(尺度 が開発された 1980 年ごろには、バーンアウトは対人関係が重要な職業で起こりやすいと考えら れていたらしい?) 。MBI には日本語に翻訳されたバージョン(増田,1997)が作成されており, 具体的な項目は表 1.1 の 17 項目で構成されています。回答者は,この各項目に示された感情を どの程度の頻度で感じているかを, 「全くない」から「月に 1 回程度」 「週に 1 回程度」 「毎日」な ど,何段階かで用意された選択肢の中から一つ一つ選択していくわけです。このように,複数個 並べられた質問文に対して程度や頻度を数段階の中から選択させることで,回答者の態度や性格 などを評価する測定法は,考案者の名前を取ってリッカート尺度(Likert scale: Likert, 1932) と呼ばれています。 表 1.1: MBI 日本語版の 17 項目(*は逆転項目) 項目 1 「こんな仕事、もうやめたい」と思うことがある 2 我を忘れるほど仕事に熱中することがある* 3 細々と気配りすることが面倒に感じることがある 4 この仕事は私の性分に合っていると思うことがある* 5 同僚や利用者の顔を見るのも嫌になることがある 6 自分の仕事がつまらなく思えて仕方のないことがある 7 1 日の仕事が終わると「やっと終わった」と感じることがある 8 出勤前、仕事に出るのが嫌になって、家にいたいと思うことがある 9 仕事を終えて、今日は気持ちのよい日だったと思うことがある* 10 同僚や利用者と、何も話したくなくなることがある 11 仕事の結果はどうでもよいと思うことがある 12 仕事のために心にゆとりがなくなったと感じることがある 13 今の仕事に、心から喜びを感じることがある* 14 今の仕事は、私にとってあまり意味がないと思うことがある 15 仕事が楽しくて、知らないうちに時間がすぎることがある* 16 体も気持ちも疲れ果てたと思うことがある 17 我ながら、仕事をうまくやり終えたと思うことがある* その後、バーンアウトは対人関係の有無に関わらずあらゆる職業で起こるものだとみなされる ようになった(北岡他,2011)ことを受けて、1996 年に MBI-General Survey(MBI-GS: Maslach 2

3.

1.2 心理尺度の難しいところ et al., 1996)が開発されました。この尺度は、オリジナルの MBI の 3 つの要因を非対人場面にも 適用できるように拡張したようなものになっていて、その 3 つの構成概念は消耗 (exhaustion)、 シニシズム (cynicism、仕事から距離を置こうとする態度)、職務効力感 (professional efficacy) です。この 3 つの尺度得点をもとに、消耗・シニシズムが高く職務効力感が低い人はバーンアウ ト状態だとみなすことができます。 ワークエンゲージメントがバーンアウトの対極にあると考えるならば、消耗・シニシズムが低 く職務効力感が高い人はワークエンゲージメントが強いと考えることができそうです。しかし、 そもそもこの仮定は正しいのでしょうか? つまり、本当にワークエンゲージメントとバーンア ウトは対極にあるものなのか、という点について、この時点ではまだ仮説の段階でしかなかった ようです。そして厄介なことに、MBI-GS の得点によってバーンアウトとワークエンゲージメン トを定義している以上は、この 2 つの関係性(e.g., ワークエンゲージメントが強い人はバーンア ウトが低いのか?)の検証は不可能です。 そこで Schaufeli らは別の視点から考え、理論的な分析を行った結果、働くことに関する well-being が 2 つの次元(activation と identification)で構成されていると指摘しました。これ をもとに、バーンアウトは「activation と identification が低く、かつ職務効力感が低い状態」 、 エンゲージメントは「activation と identification が高く、かつ没頭度が高い状態」と考えまし た。ポイントは職務効力感と没頭度が対極に位置づけられるものではないという点です。した がって、一つの尺度でバーンアウトとエンゲージメントを同時に測定することは不可能であると 考え、エンゲージメントを測定するための尺度が開発されました。こうして誕生したのがユト レヒトーワークエンゲージメント尺度(UWES: Schaufeli et al., 2002)です。この尺度は活力 (vigor)、熱意 (dedication)、没頭 (absorption) という 3 つの構成概念からなります。また、一つ 一つの項目を見ても、MBI-GS では「自分は職場で役に立っていると思うことがある」というよ うに特定のイベントや行動に関するものが並ぶ一方で、UWES では「仕事をしていると、活力 がみなぎるように感じる」などのように特定のイベントの発生の有無ではなく持続的な感情を訪 ねている項目が多いという特徴があります。 心理尺度・構成概念の曖昧さ …という感じで、ワークエンゲージメントの測定では、最初は MBI-GS が用いられていまし たが、現在では UWES が最も一般的なようです。といっても今でも MBI-GS が全く用いられ ていないというわけでもなさそうだったりします。このように、心理学では似たような構成概念 を測定するための心理尺度が結構たくさんあり、場合によっては同じような尺度が乱立している という現状があります。ちなみにバーンアウトの測定尺度にも Oldenburg Burnout Inventory (Demerouti et al., 2003)という別のものがあったりするようです。こんなことになってしまう 大きな理由は、人の心は誰にも見えないという一点に尽きると思います。 身長や体重であれば、誰が見ても納得できる客観的な基準(e.g., 1m, 1kg)があり、それを目 に見える形で測定可能です。なので測定された体重の値に対して「この体重計が本当にものの重 さを測っているとは言い切れないじゃないか!」などと文句を付ける人はいないでしょう。それ に対して心理尺度は非常に曖昧です。ワークエンゲージメントの例でも、Schaufeli らは MBI-GS 3

4.

1.2 心理尺度の難しいところ の(低)得点をそのままエンゲージメントの指標として用いることに対して「MBI-GS の得 点が低いことが本当にワークエンゲージメントの低さを示しているとは言い切れないじゃない か!」と疑問を抱いて新しい尺度を開発しました。現在では UWES がデファクトスタンダード になっていますが、将来的にはこれに対してもまた別の視点から捉え直す動きが出てきてもおか しくないのです。 尺度項目の構成 UWES はもともと 17 項目で構成されている尺度です。が、場合によっては 17 項目というの は多いかもしれません。特に他の質問と合わせて実施するような場合は、一つ一つの尺度の項目 数は少ないほうが色々な内容について聞くことができます。そういったモチベーションから、数 多くの心理尺度には短縮版が作成されてきました。UWES に対しても同様に短縮版が作られ、最 も短いものは Schaufeli et al.(2019)の 3 項目版(もともと 3 つの構成概念からなる尺度なの で、1 つの構成概念を 1 項目で尋ねている)です。 INFO UWES の超短縮版 1. 仕事をしていると,活力がみなぎるように感じる(活力) 2. 仕事に熱心である(熱意) 3. 私は仕事にのめり込んでいる(没頭) 当然ですが、基本的に心理尺度の項目数は多ければ多いほど目的の構成概念についてより詳細 に評価できるようになります。これは健康診断とよく似ていると思っています。ある人の健康 状態を知るためには、身長・体重・視力・心電図・レントゲン・血液検査…といろいろな項目を チェックして、総合的な判断を下します。もし健康診断が血液検査だけになったとしたら、検査 時間は短縮されて受診者の負担は減る一方で、不整脈などを検出することはできなくなってしま います。心理尺度も同じように、本来のフルバージョン尺度ではカバーできていた構成概念の 内容が短縮版で失われてしまっている可能性があります。例えば UWES のフルバージョンには 「活力」の項目として「職場では,元気が出て精力的になるように感じる」や「朝に目がさめる と、さあ仕事へ行こう、という気持ちになる」といった項目があります。短縮版の「仕事をして いると,活力がみなぎるように感じる」という 1 項目は、こうした他の項目の情報を十分にカ バーできているでしょうか*2 。同様のことは、短縮版ではない尺度でも起こりえます。UWES は、本当にその 17 項目でエンゲージメントのすべてを内包できているのでしょうか。そしてそ のことを、我々はどうやって証明したら良いのでしょうか。これは非常に難しい問いなのです。 *2 オリジナルバージョンによっぽどのムダが無い限り、短縮版では基本的にオリジナルバージョンと全く同じレベ ルで測定するのは不可能です。なので一般的には「たったこれだけの項目数でもこれくらいの精度で測定できて いるなら良いんじゃないですか」という感じで短縮版尺度が提案されます。短縮版はあくまでも一つの選択肢で あり、短縮版を使うかフルバージョンを使うかは調査者に委ねられる、ということです。その他短縮版に関する 議論については Sitarenios(2022)などを参照してください。 4

5.

1.2 心理尺度の難しいところ 尺度の利用の難しさ UWSC はその名が示す通りオランダで開発された尺度ですが、現在では日本語版(Shimazu et al., 2008)が用意されています。海外で開発された尺度を日本で使用するのは、実は結構たい へんです。その理由としては大きく分けて二つあると私は考えています。 1. 通常異なる言語間で全く同じ内容を指し示す項目を作成するのが本質的に不可能なケース すらある、という点です。例えば日本語の「仕事」と英語の「work」は全く同じ概念で しょうか?(私も英語に強いわけではないので調べてみたところ)この二つの単語は対価 の有無や専門性の有無などによって微妙に異なるニュアンスになっているようです。心理 尺度の目的は特定の構成概念を測定することにあるため、こうした繊細な言語の違いが回 答内容に影響しないように翻訳を行う必要があったりします。 2. そもそも日本と海外では「働く」ということの意味や社会的な位置づけが異なる可能性が あります。例えば「お金のために働く」ことを美徳としない国があったとしたら、その国の 人が感じるワークエンゲージメントは全然違うものになるでしょう。つまり完璧に翻訳で きたとしても、オリジナルの尺度と全く同じ構成概念を測定できるとは限らないのです。 この 2 点目に関しては、文化の違いに関する難しさです。同じようなことは、日本国内だけを 見ても起こり得る話です。つまり、もともと日本語で作成された尺度であっても様々な要因に よって使えない尺度になる可能性が出てきます。その最たる要因は時代でしょうか。同じ日本国 内であっても、仕事に対する価値観は時代とともに変化します。ここ数年だけを見ても、新型コ ロナウィルスの流行によりリモートワークが普及したことは、職場の選び方やワークライフバラ ンスに対する考えを大きく変えました。あるいは世代による違いも大きいかもしれません。終身 雇用が当たり前だった団塊の世代では転職はあまり良いものと捉えられていなかったかもしれま せんが、現代では職場を転々とすることへの抵抗感はほぼないでしょう。このように時代の流れ などに対して、心理尺度は普遍的ではない可能性があるのです。 まとめ ワークエンゲージメントの尺度を例にとり、心理測定の難しさをいくつか挙げました。いずれ の問題も一言で言えば人の心は誰にも見えないというのが原因と言えるでしょう。つまり究極的 には「その質問で本当に測定したい構成概念を測定できているのか」は誰にも分かりません。だ からこそ分析者には「本当に測定したい構成概念を測定できている」ことをきちんと説明する義 務があります。海外で開発された「ナントカ」という構成概念を測定する尺度があったというと きに、それを自分でそれっぽく訳して日本人に尋ねたとしても、それだけではオリジナルの構成 概念を再現できているとは言えないのです。ただし「本当に測定したい構成概念を測定できてい る」ことは、どこまで行っても証明しきれないものです。 この講義で扱う因子分析 や SEM などの分析方法は、「数値として得られたデータ」に対して 何らかの解を出してくれる手法です。その分析の最中においては,データが表す数字が何を表し ているかは全く関係ありません。どういう内容の概念を,どういう言葉遣いで尋ねて,どういう 5

6.

1.3 R のキホンのキ(時間&興味があれば) 方法で回答してもらったかに関わらず,出力された(例えば)1から5の数字の集まりに対して 何か複雑な計算をしているだけなのです。したがって、もし「数値として得られたデータ」が意 味不明なものだったとしたら、分析の結果として「何かしらの数字」は出力されても,その結果 には何の意味もないのです。ということで、分析に入る事前準備として,講義の前半では「数値 として得られたデータ」が本当に使い物になるデータなのかを考えるための概念的なお話もして いく予定です。 1.3 R のキホンのキ(時間&興味があれば) ここでは R のインストールから、超基本的な R の使い方を説明します。といっても R の解説 なんてものはネット上にゴロゴロ転がっているので、いろいろ見て試してみてください。 R とはなんぞや R 言語(アールげんご)はオープンソース・フリーソフトウェアの統計解析向けのプログ ラミング言語及びその開発実行環境である (Wikipedia)。 R は,プログラミング言語の一種です。すごくシンプルに言うと超すごい関数電卓みたいなも のです。「統計解析向け」とあるように,特にデータ分析で使われるような手法と相性が良い仕 様を持っていたりするので,使いこなせると大抵の分析ができるようになります。 ちなみに統計解析には R と Python という二大勢力があります。どちらを使うのが良いか,と いう点については様々な要因が絡んできます。主に Python のほうが機械学習やディープラーニ ングといった領域には強かったり,アプリケーションへの組み込みがしやすいなどの理由のも あってか,就職して社会に出るのであれば圧倒的に Python が良いとされています。一方 R は, インタラクティブな分析とデータ可視化に大きなアドバンテージを持っています。そういった点 から,最新の統計的手法を扱う学術研究の方面では R のコミュニティのほうが活発な印象です。 誤解を恐れずざっくりいうと,理系は Python 寄り,文系は R 寄りであることが多いです。私 の出身である心理学をはじめ,経済学や経営学でも研究者は R ユーザーの方が多い気がします。 そんなわけで,2023 年度から経営学部で始まった経営データ特別学修プログラムでも R を使う ことになりました。ただ,できるなら R も Python も両方使えるようになっておくのが一番良い です(私は R しか使えませんが)*3 。 R のインストールまで もう R は市民権を得ているので、Google で検索するとたぶん一番上に R Project のページが 出てくるはずです。 R Project のページに行ったら、左の”Download” の”CRAN” というところをクリックします。 続いて、ミラーサイトを選択します。 R の本体およびパッケージ群は、 Comprehensive R *3 ちなみにデキる大人は R の中で Python を呼び出したり,その逆をしたりします。得意不得意があることをよ く理解している人は,それぞれの言語に得意な作業を分担させたりするわけです。最近では R からでも Python からでも ChatGPT を呼び出したりもできます。 6

7.

1.3 R のキホンのキ(時間&興味があれば) 図 1.1: R で検索したら一番上 図 1.2: R project のページ Archive Network (通称 CRAN*4 ) によって管理されています。CRAN は世界各地にミラーサイ トが用意されているため、なんやかんや DL する場合は近場のミラーサイトを選択するのが無難 です。…ですが最近ではとりあえず一番上のクラウドサーバーを選んでおけば OK という風潮が あります。 図 1.3: 一番上を選んでおきましょう あとはご自分のパソコンの OS に合わせて選んでダウンロードしてインストールしたら OK です。 ※ Windows ユーザーの方は一番上の”base” を選んでください。 R をインストールしたら起動してみましょう。とりあえずこれで R が使えるようになりまし *4 「しぃらん」と読むらしいですね。 7

8.

1.3 R のキホンのキ(時間&興味があれば) 図 1.4: OS を選んでダウンロード画面へ た。簡単ですね。 図 1.5: R の画面 カーソルの左側が >となっているときには入力可能です。試しに 1+1 とかやってみてくだ さい。 統合開発環境 (IDE) インストールのすすめ R は単体でも問題なく使えるのですが、もっと楽したいものです。 • 閉じカッコも自動的に入れてほしいなあ 8

9.

1.3 R のキホンのキ(時間&興味があれば) • 関数や変数の名前を予測入力したいなあ • 関数のヘルプが見やすくなるといいなあ R に限らずですが、プログラミング言語を扱う場合には、一つの画面でコードを書いたり実行 したりなんやかんや…がまとまっている環境(統合開発環境: IDE)を用意しておくのがベター です。R でいうと RStudio というものが最も有力です。R 単体で分析する場合には RStudio が おすすめですが、python などの別の言語と組み合わせて分析などする場合には Visual Studio Code も有力な選択肢の一つになるでしょう*5 。 R の基本操作 ここからは R の基本オブ基本の話です。この講義の演習内容を理解する上で十分な基礎知識だ と思いますが、今後足りなければ適宜補足しつつこの資料をアップデートします。 四則演算 四則演算 1 2 3 4 5 6 7 # 各行のシャープ以降の内容はコメントとして扱われる 1 + 1 # たしざん 2 - 2 # ひきざん 3 * 3 # かけざん 4 / 4 # わりざん 5^5 # 累乗 7 %% 3 # あまり 1 2 3 4 5 6 [1] 2 [1] 0 [1] 9 [1] 1 [1] 3125 [1] 1 とまあこんな感じです。私はちょっとした電卓代わりに使ったりもします。 変数とは プログラミング言語は「変数」と「関数」がよく出てきます。数学で出てくる「変数」や「関 数」と同じといえば同じですが微妙に異なる気もします。 *5 ただ最近では RStudio の開発元が Posit に改名されたように,Rstudio でも R と Python をだいぶ並行し て扱えるようになっています。とはいえ VScode は扱える言語の数が圧倒的に多いので,例えば「LateX で 論文を書きながら,R で分析しながら,ちょっとしたメモは markdown で書きながら…」みたいな猛者には VScode もおすすめです。 9

10.

1.3 R のキホンのキ(時間&興味があれば) 変数とは、何らかの値を入れておく「ハコ」のようなものだと思ってください。例えば、以下 のコードでは box というハコに 2 という数字を入れています。 変数への代入 1 box <- 2 ハコの名前は基本何でも良いので、例えば hako <- 2 としても問題ありません。この場合は hako という名前のハコに 2 という数字が入ります。また、ハコの中に入るものはほぼなんでも OK です。この後いろいろ出てきますが、単一の数字の他にも、複数の数字のまとまり(ベクト ル)や文字を入れることも可能です。 変数へ文字列の代入 1 box2 <- "hello" では、以下のコードの答えはそれぞれ何になるでしょうか。 変数の掛け算,どうなる? 1 2 box * 3 box2 * 3 *は掛け算の記号でした。そして box には 2 という数字が入っていたので、答えは 6 となり ます。一方、box2 には "hello"という文字列が入っています。文字を 3 倍することは(通常の 方法では)できないので以下のようなエラーが返ってくるのです。 1 Error in box2 * 3: non-numeric argument to binary operator ちなみに上記のエラー文に出てくる単語はそれぞれ • non-numeric は「数字じゃない(厳密に言うと,数字を表す numeric 型ではない)」 • argument は「引数」 • binary operator は「二項演算子」 という意味です。二項演算子とは,例えば *や + のような「計算を表す記号」です。掛け算や 足し算などは 2 つの数字(引数)を用いて行われる演算です。R ではこうした記号が表す演算は non-numeric な引数ではできません*6 。そのため「二項演算子の引数が non-numeric じゃあ駄 目だよ」というエラーを出しているわけです。…というように,エラー文はちゃんと読むことが できれば解決のヒントを教えてくれます。最初は専門用語などがあってわかりにくいと思います *6 実は Python を始めとする多くのプログラミング言語では,+ か *の演算が文字列に対しても適用可能です。こ れらの言語では,「数字同士だったら足し算(掛け算)をする」「どちらか一方でも文字列だったら文字列をくっ つける」という処理が定義されていることが多いのです。したがって,Python で box2 + 3 とした場合には, "hello3"という値が出力されます。 10

11.

1.3 R のキホンのキ(時間&興味があれば) が,頑張って慣れていきましょう。 ベクトルとは R にはベクトルというものもあります。更にいうと行列もあるのですが,それはそのうち紹介 します。とりあえずここでは簡単にベクトルの説明をしておきます。数学で出てくるベクトルと は概ね異なるものですが、これはよく使うのでしっかり理解しておきましょう。例えば、以下の コードでは vec というハコ(変数)に 2 から 10 までの偶数が並んだベクトルを入れています。 変数へベクトルを代入 1 2 vec <- c(2, 4, 6, 8, 10) vec # vecの中身を表示する 1 [1] 2 4 6 8 10 では、変数のときと同じように vec を 3 倍するとどうなるでしょうか。 ベクトルの掛け算 1 vec * 3 1 [1] 6 12 18 24 30 ベクトルに四則演算を適用した場合、ベクトル内のすべての要素が 3 倍されます。ここは数学 のベクトルと同じですね。したがって答えは 6, 12, 18, 24, 30 となるわけです。 ベクトルの中から特定の要素を取り出す場合には [ ](四角カッコ)で要素番号を指定してあ げます。例えば以下のコードでは、vec という変数の中にある 3 番目の要素を取り出します。 ベクトルの要素を取り出す 1 vec[3] 1 [1] 6 R の中では,[ ] は基本的にいつでも「何番目の要素か」を表す記号(インデックス)です。 そのため,先ほどから R の出力の左に毎回出ていた [1] というのは「ここから(出力の)1 番目 の要素ですよ」ということを意味しています。 実は [ ] の中身は数字である必要はありません。例えば先程作った box をそのまま入れると… 変数による要素番号の指定 1 vec[box] 11

12.

1.3 R のキホンのキ(時間&興味があれば) 1 [1] 4 これは vec というベクトルの中の box 番目の要素を取り出します。box には 2 という数字が 入っていたので、上のコードは vec[2] と同じ動きをして、4 を返しているわけです。 当然ですが、[ ] の中にベクトルの長さよりも大きな値や,そもそも数字では無いものが入っ ていた場合、NA (Not Available) という値が返ってきます。つまりは「そこに値は無いよ」とい う意味です。 存在しないものは取り出せない 1 2 vec[100] vec[box2] 1 2 [1] NA [1] NA では、マイナスの値が入っていた場合は? マイナス 3 番目も存在しないと思いきや 1 vec[-3] 1 [1] 2 4 8 10 実はこの場合、それ以外の要素が返ってきます。つまり上のコードでは vec の中から 3 番目 以外を返しているわけです。 では、ここまでの内容の復習も兼ねて、以下のコードを実行したらどうなるか頭の中でシミュ レートしてみてください。答え合わせは手元の R で。 めざせ引数マスター 1 2 3 4 5 6 7 arg <- c(4, 7, 2, 5, 1) arg[1] <- 10 arg[2] <- arg[3] arg[c(4, 5)] <- arg[2] * arg[1] arg[c(1, 3, 2)] <- c(5, 2, arg[5]) arg[arg[3]] <- arg[arg[1]] arg # 最終的なargの中身は? 関数とは 数学の関数は、例えば 𝑓(𝑥) = 𝑥2 + 5𝑥 + 6 のようなものでした。もう少し説明すると、関 数 𝑓 は 𝑥 という値が入ると 𝑥2 + 5𝑥 + 6 という計算結果を返す、そういうやつです。なので 12

13.

1.3 R のキホンのキ(時間&興味があれば) 𝑓(2) = 20 となるし、𝑓(10) = 156 となります。これは R を含む多くのプログラミングでも同じ です。例えば sum() という関数は「すべての合計を返す」というものです*7 。多変数関数として 数学っぽく書くなら sum(𝑥1 , 𝑥2 , 𝑥3 ) = 𝑥1 + 𝑥2 + 𝑥3 ということです。したがって、下のコード は sum(𝑥1 = 1, 𝑥2 = 3, 𝑥3 = 5) = 1 + 3 + 5 を計算していることになります。 関数 1 sum(1, 3, 5) 1 [1] 9 関数のメリットは入力の値が何であっても同じ作業をレシピ化できるという点です。sum() く らいならいちいち足しても良いのですが、もっと複雑になるといちいち書くのは面倒です。例え ば 1 から 10 までのベクトルの不偏分散を計算する、というプロセスを sum() 以外の関数を使わ ずに描くと 不偏分散の計算を手作業でやると 1 2 3 4 5 vec <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) mean_vec <- sum(vec) / 10 # 平均値を計算する diff_vec <- vec - mean_vec # 平均値からの偏差を計算する diff2_vec <- diff_vec^2 # 平均値からの偏差の二乗を計算する variance <- sum(diff2_vec) / 9 # 不偏分散なので分母は10-1 となります。与えられるデータ vec が変わるたびにいちいちこれをやるのは面倒ですし,割り 算の分母をきちんと vec の長さに応じて変える必要があり,明らかにヒューマンエラーが起こり そうです。 実は R には不偏分散を計算する関数として var() が用意されています。つまり上の処理はか んたんに 不偏分散の関数 1 2 vec <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) variance <- var(vec) と書けるわけです*8 。 また関数は数値計算だけのものではありません。これまでに何度も登場してきた c() というも のも関数ですが、これは単純に「与えられたものを全部くっつけてベクトルにする」という処理 を行います*9 。くっつけるだけなので数値計算は行っていないですし、ベクトルの中に文字列を *7 以降、関数であることを表すときには関数名の後に空白のカッコをつけます。 *8 というように、R の var() 関数は不偏分散を計算する関数として用意されている一方、デフォルトでは標本分 散を計算する関数が無いので、標本分散を計算したい場合は var()/(n/(n-1))( n はデータの数)とかしてく ださい。 *9 combine の頭文字で c です。 13

14.

1.3 R のキホンのキ(時間&興味があれば) 14 入れることもできます(R のベクトルは数学のベクトルよりも広い概念なのです) 。 ベクトルの中は結構なんでもあり 1 2 vec2 <- c(3, "Hello", 12, pi) # piはデフォルトで円周率が入っている変数です vec2 1 2 [1] "3" "Hello" [4] "3.14159265358979" "12" なんでもありとは言え,実際にはベクトルの中身は、同じ性質のもの(数字だけ、文字列だけ) にしておくのが無難です。というのも、例えば上で定義した vec2 に対して vec2 * 3 のような 計算を行おうとしても、文字列 "Hello"のせいでエラーが返ってきてしまいます。 関数のヘルプ 当然ですが、私も(たぶんこの世の誰も)R のすべての関数が頭に入っているわけではありま せん。プログラミングはトライ&エラーを繰り返す世界なので、重要になるのはわからないとき に調べる能力です*10 。 例えばある質問項目への 4 人の回答の平均値を計算する場面を考えてみます。変数 ans_q1 に、4 人の回答をベクトルとして代入しました。ただし、3 番目の人はこの項目に無回答だった ため、NA を入れています。このベクトルに対して,平均値を計算する mean() 関数を適用すると どうなるでしょうか。 NA があるときの平均値計算 1 2 ans_q1 <- c(3, 5, NA, 2) mean(ans_q1) 1 [1] NA 実は mean() や sum() などの関数では、一つでも NA が入っていると NA を返す仕組みになっ ています。これ自体は R の挙動としてなんの問題もないのですが、回答した人での平均値を出し たいとすると、少し手を加えてやる必要があります。このように、特定の関数についてちょっと 手を加えたい(e.g., 因子分析の因子数を変えたい、一般化線形モデルのリンク関数を変えたい) 場合、まずは関数のヘルプを見てみましょう。関数のヘルプは以下のいずれかのコマンドで表示 可能です。 *10 あとは人に頼る能力も重要だと思います。

15.

1.3 R のキホンのキ(時間&興味があれば) 関数のヘルプを見る 1 2 help(mean) ?mean 図 1.6: mean() 関数のヘルプ ヘルプには、だいたい上から順に次のような内容が書かれています。 Description どんなことをする関数なのかを説明しています。 Usage 関数の書き方。例えば mean() 関数には mean(x, trim = 0, na.rm = FALSE, ...) と書かれています。このカンマで区切られた一つ一つ ( x, trim, na.rm) を引数(ひき すう)と呼び、trim = 0 とは「 trim を指定しなかったらデフォルトで 0 を入れておく よ」ということを意味します。反対に x にはデフォルトの値がありません。当然ですが mean() 関数は引数 x の平均値を返すわけなので、x がなければ動きようが無いわけです。 Arguments 引数の具体的な説明です。とりあえず関係ありそうな引数を色々いじってみるとう まくいくかもしれません。 15

16.

1.3 R のキホンのキ(時間&興味があれば) Details mean() 関数には無いですが、Details 欄にはその関数について細かい説明が書かれて いることがあります。Arguments についても細かい説明をしてくれている事があるので, マジでわからないときはここまで読んでみてください。 Value 結果として出てくる値についての説明。例外についても説明してくれることがあります。 References その関数についての参照文献。特に高度な統計分析のときは,その手法を提案した 元論文を示してくれるので「統計的に何やってるか」や「引数のデフォルトがなんでその 値なのか」など、もっと知りたくなったらここに載っている論文をあたってみてください。 See Also 関 係 の あ り そ う な 他 の 関 数 へ の リ ン ク。 mean() に 対 し て は, 加 重 平 均 を と る weighted.mean() や、行列の列ごとの平均を取る colMeans() などがあります。 Examples その関数を使っているサンプルコード。自分で書いたコードが上手くいかないときに は、とりあえずここをコピペして実行してみると,その関数がどんな動き方をするか、そ の関数を使うためにデータをどう整形する必要があるか、などがなんとなく見えてくるか もしれません。 ということで、関数のヘルプを見た結果、以下のようにすると正しく回答した 3 人の平均値が 得られることがわかりました。 値があるぶんだけでも平均値計算 1 mean(ans_q1, na.rm = TRUE) 1 [1] 3.333333 パッケージとは 料理をする場合、工夫次第では包丁とフライパンさえあれば結構いろいろなことができるよう になります。ですが、じゃがいもの皮を剥く場合には包丁よりもピーラーのほうが楽と感じる人 が多いでしょう。ピーラーは皮むきに特化した調理器具なわけです。 これと同じように、デフォルトの R は基本的な関数だけしか入っていない最小構成になってい ます。といっても結構いろいろなことができるわけですが、やはり高度な分析(e.g., SEM、項 目反応理論)になるとそのままでは厳しくなってしまいます。R にはパッケージと呼ばれる拡張 機能のようなものが大量にあります。最後にパッケージの説明をして、R の基礎レクチャーは終 わりにします。 ここでは、因子分析のときにお世話になる psych パッケージを入れてみましょう。psych は その名がなんとなく示すように、心理学にまつわる統計解析で便利な関数がいろいろ入っていま す。パッケージは、R 本体と同じように CRAN からダウンロードしてインストールするので、 インターネットにつながった状態で以下のコードを実行してください。 パッケージのインストール 1 install.packages("psych") 16

17.
[beta]
1.3 R のキホンのキ(時間&興味があれば)
ここで注意するのは、引数はクオートでくくった "psych"にするという点です。R では、シ
ングルクオート( ' ')またはダブルクオート ( " ") でくくられたものは文字列 (character
型) として扱われるのですが、install.packages() 関数が正しく解釈できる引数はこの char-

acter 型の場合のみです。もしも引数をくくらずに install.packages(psych) とした場合、
install.packages() 関数は psych という変数(ハコ)を探しに行ってしまいます。すると、
「 psych なんてハコはまだ無いよ」とエラーが返ってきてしまいます*11 。
クオートしないとエラーが出る
1

install.packages(psych)

1

Error in eval(call, envir = parent.frame()): object 'psych' not found

出力画面に Error: で始まる何かが表示されずに入力画面の左が >に戻ればインストール成功
です。パッケージのインストールは「ピーラーを買ってきた」状態なので、実際に使うためには
「ピーラーを棚から出す」手続きが必要になります。
パッケージの呼び出し
1

library("psych") # ここはlibrary(psych)でもよい

INFO インストールされたパッケージはどこへ?
install.packages() 関数では,ネットワーク上からパッケージのファイルをダウン
ロードして,R が呼び出せるように準備を整えてくれます。このとき,ダウンロードされ
たパッケージのファイルは,パソコンの(ローカル)フォルダの中に格納されます。
フォルダの場所は OS および R のインストール時の設定等によって変わるため一概には言
えませんが,例えば Windows の PC で,インストール時の設定を弄らなかった場合には,

C:\Program Files\R\R-x.y.z\library というフォルダ( x.y.z は R のバージョンの
数字)の中に,パッケージごとにフォルダが置かれているかと思います。
パッケージが(ローカル)フォルダ内に保存されるということは,基本的に同じパッケージに
対して毎回 install.packages() を実行する必要は無いですし,install.packages()
のとき以外には R がネットワークに繋がっている必要もありません。つまりこの直後に紹
介している library() 関数から始めて大丈夫です。
ただし,フォルダのパスに x.y.z(R のバージョンの数字)が入っているように,R の
バージョンが変わると,基本的にパッケージは全て入れ直す必要があるという点だけはご
注意ください。
*11 例 え ば で す が こ れ よ り 前 に

psych <- "xxx"と い う コ ー ド を 実 行 し て い た 場 合 に は、
install.packages(psych) は install.packages("xxx") となるので、"xxx"が実在するパッケージ名
であれば、( psych パッケージではなく)xxx パッケージをインストールします。

17

18.

1.3 R のキホンのキ(時間&興味があれば) パッケージの呼び出しは library() 関数を使います。この手続きは R を起動するたびに行う 必要があるので注意してください。パッケージを呼び出しせずにパッケージ内の関数を使おうと すると、ほとんどの場合では以下のようなエラーが返ってきます。このときには関数名を間違え ていないか、パッケージをちゃんと呼び出したかを確認してください*12 。 パッケージを呼び出し忘れて関数を実行 1 2 3 # fa()はpsychパッケージの中にある、因子分析を行うための関数です。 # 上に示した library("psych") を実行し忘れたと仮定してください。 fa(x) 1 Error in fa(x): could not find function "fa" *12 大学の学部で R の授業をすると、マジで何割かはこの質問が来ます。体感では一番の FAQ です。 18

19.

参考文献 参考文献 Demerouti, E., Bakker, A. B., Vardakou, I., & Kantas, A. (2003). The convergent validity of two burnout instruments: A multitrait-multimethod analysis. European Journal of Psychological Assessment, 19(1), 12–23. https://doi.org/10.1027//1015-5759.19.1.12 北岡 和代・増田 真也・荻野 佳代子・中川秀昭(2011) .バーンアウト測定尺度 Maslach Burnout Inventory-General Survey(MBI-GS) の概要と日本版について 北陸公衆衛生学 会誌,37, 34–40. Likert, R. (1932). A technique for the measurement of attitudes. Archives of psychology. New York. Maslach, C., & Jackson, S. E. (1981). The measurement of experienced burnout. Journal of Organizational Behavior, 2(2), 99–113. https://doi.org/10.1002/job.4030020205 Maslach, C., Jackson, S. E., & Leiter, M. (1996). Maslach Burnout Inventory Manual (3rd ed.). Consulting Psychologists Press. 増田 真也(1997) .日本語版 Maslach Burnout Inventory の妥当性の検討 健康心理学研究, 10(2), 44–53. https://doi.org/10.11560/jahp.10.2_44 Schaufeli, W. B., Salanova, M., Lez-Roma, V. G., & Bakker, A. B. (2002). The measurement of engagement and burnout: a two sample confirmatory factor analytic approach. Journal of Happiness Studies, 3, 71–92. https://doi.org/10.1023/A:1015630930326 Schaufeli, W. B., Shimazu, A., Hakanen, J., Salanova, M., & De Witte, H. (2019). An ultra-short measure for work engagement: the UWES-3 validation across five countries. European Journal of Psychological Assessment, 35(4), 577–591. https://doi.org/10.1027/ 1015-5759/a000430 Shimazu, A., Schaufeli, W. B., Kosugi, S., Suzuki, A., Nashiwa, H., Kato, A., Sakamoto, M., Irimajiri, H., Amano, S., Hirohata, K., Goto, R., & Kitaoka-Higashiguchi, K. (2008). Work engagement in Japan: validation of the Japanese version of the Utrecht Work Engagement Scale. Applied Psychology, 57 (3), 510–523. https://doi.org/10.1111/j.14640597.2008.00333.x 19

20.

参考文献 Sitarenios, G. (2022). Short versions of tests: best practices and potential pitfalls. Journal of Pediatric Neuropsychology, 8, 101–115. https://doi.org/10.1007/s40817-022-00126-0 20