模擬調査データ

授業で使う模擬調査データの変数一覧、読み込み方、生成スクリプト
公開

2026-09-08

最終更新

2026-10-02

1 目的

この授業では、成人1,000人が生活や仕事についてのアンケートに答えたと想定した、架空のデータを使います。年齢や年収のほか、周囲の人に頼れると感じているか(社会的サポート)、ストレスをどの程度感じているか(ストレス)、生活に満足しているか(生活満足度)についての回答が入っています。

このページでは、質問の内容と回答の読み方を確認し、データをRに読み込みます。その後、複数の質問への回答をまとめて、ストレスや生活満足度などを表す点数を計算します。このデータは、授業で扱うさまざまな分析の練習に共通して使います。

2 ファイルとRの準備

まず、練習用のデータを手元に用意しましょう。RとPositronのインストールがまだの場合は、先に「RとPositronのセットアップ」を進めてください。フォルダの開き方とコードの実行方法も、そちらで説明します。

データを保存して、中身を確認する

まず、模擬調査データ(CSV)をダウンロードし、Positronで開いている授業用フォルダに保存してください。ファイル名は mock_survey.csv です。セットアップで保存したCSVがこのフォルダにあれば、そのファイルを使えます。

続いて、コードブック(データの説明書・Markdown)もダウンロードし、CSVと同じ授業用フォルダに保存してください。ファイル名は mock_survey_codebook.md です。

この説明書には、CSVに入っている変数の意味、質問文、得点の計算方法をまとめています。保存したファイルは、Positronのファイル一覧でクリックして開けます。Markdown(拡張子 .md)は、見出しや表などを書けるテキスト形式です。

分析中に変数の意味が分からなくなったら、この説明書を参照してください。このページでは、AIにコードの作成を頼むときにも、この説明書を添付するか、必要な説明をコピーして指示に添えます。CSVのデータそのものはAIに渡しません。

CSVとは、表のデータを、値をカンマで区切って保存するファイル形式です。例えば、年齢と年収を記録した表は、CSVでは次のように書かれています。

age,income
25,300
40,500

最初の行は列の名前で、age は年齢、income は年収を表します。その下の各行が1人分のデータです。この例では、25歳で年収300万円の人と、40歳で年収500万円の人が記録されています。

ダウンロードしたファイルも開いてみましょう。Positronのファイル一覧で mock_survey.csv をクリックしてください。上の例と同じように、列の名前と、カンマで区切られた値が並んでいます。今回は列が多いので、すべてを読む必要はありません。最初の行に id、region、age などの名前があることを確認してください。

ここでは中身を見るだけにして、文字を入力したり、削除したりしないでください。誤って変更した場合は、ファイルのタブを閉じ、変更を保存しないでください。

このデータには1,000人分の架空の回答が入っています。最初の列名の行を除き、1行が1人に対応します。各列の意味は、下の「変数一覧」で確認します。

必要なパッケージを用意する

Rのパッケージとは、使える関数を追加するためのものです。このページでは、データの読み込みに readr、新しい変数の作成に dplyr を使います。セットアップで tidyverse をインストール済みなら、この2つも含まれているため、追加のインストールは不要です。

まだインストールしていない場合は、次のコードを一度実行してください。

# CSVの読み込みと、元の列を残した得点計算に使います。
install.packages(c("readr", "dplyr"))

これで準備は完了です。データをRに読み込む前に、どのような情報が入っているかを確認しましょう。

3 データの内容

変数一覧

データの各列には、年齢や年収などの情報が入っています。分析で扱うこうした情報を「変数」と呼びます。下の表では、CSVの列名を「変数名」、その意味を「内容」、記録されている数字や文字の意味を「値・単位」にまとめています。例えば、income の値が300なら、その人の年収は300万円という意味です。

すべての変数名を覚える必要はありません。分析で使う列が出てきたときに、この表で意味を確認してください。なお、このデータには未回答などによる値の抜け(欠損値)はありません。

変数名 内容 値・単位
id 架空の回答者を区別する番号 1〜1,000。1人に1つずつ割り当て、同じ番号の人はいません
region 架空の地域 A / B。各500人
age 年齢 20〜79歳、1歳刻み
education_years 修了した課程までの教育年数 9年(中学校)/ 12年(高校)/ 14年(短大などの2年課程)/ 16年(4年制大学)/ 18年(修士課程)
income 個人の年収 万円単位で、0以上の整数。0は年収がないことを表し、未回答ではありません
gender 性別 female(女性)/ male(男性)/ other(その他)
employment_status 就業区分 regular(正規雇用)/ nonregular(非正規雇用)/ self_employed(自営業等)/ not_employed(非就業)
marital_status 婚姻状況 never_married(未婚)/ married(既婚)/ divorced(離別)/ widowed(死別)
household_size 本人を含む世帯人数 1〜6人
weekly_work_hours 週労働時間 0〜70時間、1時間刻み
support_1〜support_5 社会的サポートについての5つの質問への回答 各質問に1〜5で回答。数字の意味は下の「回答の選択肢」を参照
stress_1〜stress_5 ストレスについての5つの質問への回答 同上
life_satisfaction_1〜life_satisfaction_5 生活満足度についての5つの質問への回答 同上

表の最後の3行は、それぞれ5列分をまとめて書いています。例えば、support_1〜support_5 は、support_1、support_2、support_3、support_4、support_5 の5列です。これらを含めて、CSVには全部で25列あります。

このデータは授業用に乱数から作成しており、実際の人口構成や就業率を再現するものではありません。このデータから計算した平均値も、実在する集団の平均としては使えません。分析の練習に使うため、次のように設定を簡略化しています。

  • 教育年数には留年や休学の年数を加えていません。在学中の人は、修了済みの課程までの年数としています。
  • 既婚者は世帯人数を2人以上としています。現実には、既婚者の単身世帯もあります。
  • 非就業者の週労働時間は0時間としています。ただし、非就業でも年収がある人は含まれています。
  • 若年者の就業確率が高いのは教材上の設定です。在学状況は表していません。
  • 性別の「その他」は人数が少ないため、授業では性別による群比較を主な分析例には使いません。

4 質問項目と回答の読み方

回答の選択肢

社会的サポート、ストレス、生活満足度については、それぞれ5つ、合計15の質問を用意しています。どの質問も、自分にどの程度あてはまるかを次の5つの選択肢から選ぶ形式です。このような回答形式を「5件法」と呼びます。

CSVには、選択肢の文章に代えて1〜5の数字が入っています。例えば、support_1 の値が4なら、「困ったときに相談に乗ってくれる人がいる」という質問に「ややあてはまる」と答えたことを表します。

CSVに入っている値 回答の意味
1 まったくあてはまらない
2 あまりあてはまらない
3 どちらともいえない
4 ややあてはまる
5 とてもよくあてはまる

続いて、それぞれの質問文を確認しましょう。以下の質問と回答は、分析を練習するために用意したものです。

質問文は授業用に作成しました。社会的サポートやストレス、生活満足度を適切に測れるかどうかは検証していません。実際の研究で使う尺度として紹介しているものではありません。計算した得点を診断の基準として使うこともできません。

社会的サポート

必要なときに頼れる人がいると思えるかを尋ねます。

変数名 質問文
support_1 困ったときに相談に乗ってくれる人がいる。
support_2 つらいときに気持ちを受け止めてくれる人がいる。
support_3 必要なときに助けを頼める人がいる。
support_4 私のことを気にかけてくれる人がいる。
support_5 悩みがあっても、頼れる人がいない。

ストレス

ここ1か月の状態を振り返って回答します。

変数名 質問文
stress_1 やるべきことに追われていると感じる。
stress_2 日々の生活で、気が張りつめている。
stress_3 小さなことでも、いら立ちを感じる。
stress_4 気がかりなことが頭から離れない。
stress_5 気持ちに余裕を持って過ごせている。

生活満足度

現在の生活全体への満足を尋ねます。

変数名 質問文
life_satisfaction_1 今の生活に満足している。
life_satisfaction_2 今の暮らしは、自分の望む生活に近い。
life_satisfaction_3 生活を全体として見れば、うまくいっていると感じる。
life_satisfaction_4 今の暮らしには、満足できることが多い。
life_satisfaction_5 今の生活には、不満が多い。

5 得点の計算方法

ここでは、計算の考え方を確認します。1,000人分を手作業で計算する必要はありません。実際の計算は、次の「AIへの指示例」でAIにRのコードを作ってもらい、そのコードをPositronで実行して行います。まずは、Rにどのような計算をさせるのかを理解しましょう。

社会的サポートについては、頼れる人がいると感じている程度を、5つの質問への回答から1つの点数にまとめます。ストレスと生活満足度も、それぞれの5つの回答をまとめます。このように、複数の質問への回答をまとめて求める点数を「尺度得点」と呼びます。

このデータでは、1人ずつ、尺度ごとに5つの回答の平均を求めます。ただし、そのまま平均を求める前に、5番の回答だけを計算用の点数に置き換える必要があります。社会的サポートを例に、その理由と計算方法を確認しましょう。

5番の回答を計算用の点数に置き換える

社会的サポートの1〜4番は、頼れる人がいるかを尋ねています。例えば、1番の「困ったときに相談に乗ってくれる人がいる」に5(とてもよくあてはまる)と答えた人は、頼れる人がいると感じています。

一方、5番は「悩みがあっても、頼れる人がいない」です。この質問に5と答えた人は、頼れる人がいないと感じています。同じ5という回答でも、1〜4番とは意味の向きが逆になっています。このような質問を「逆転項目」と呼びます。

アンケートでは、質問の内容にかかわらず「あてはまる」を選びやすい人がいます。すべての質問を同じ向きで尋ねると、その人が本当に頼れる人がいると感じているのか、単に「あてはまる」を選びやすいのかを区別しにくくなります。

こうした回答の偏りの影響を抑える目的で、「頼れる人がいる」と「頼れる人がいない」のように、逆向きの質問を組み合わせることがあります。ただし、逆転項目を入れれば必ず偏りを防げるわけではありません。質問の読み違いや混乱を招く場合もあります(van Sonderenほか, 2013)。

この教材では、逆転処理を練習できるように、各尺度の5番に逆転項目を設けています。

そこで、5番の回答を次のように置き換えます。

元の回答 計算に使う点数
1 5
2 4
3 3
4 2
5 1

この置き換えは、6 - 元の回答 で計算できます。例えば、5番への回答が2(あまりあてはまらない)なら、計算に使う点数は 6 - 2 = 4 です。これで、5つとも点数が高いほど、頼れる人がいると感じている方向にそろいます。この処理を「逆転処理」と呼びます。

ストレスと生活満足度も、このデータでは5番だけが逆転項目です。support_5、stress_5、life_satisfaction_5 の3列に同じ処理を行い、1〜4番は元の回答をそのまま使います。

1人分の5つの点数から平均を求める

例えば、ある人の社会的サポートへの回答が、1番から順に4、3、5、4、2だったとします。5番の2を4に置き換えてから、5つの点数を足して5で割ります。

元の回答:       4、3、5、4、2
計算に使う点数: 4、3、5、4、4
社会的サポートの得点 = (4 + 3 + 5 + 4 + 4) / 5 = 4.0

この人の社会的サポートの尺度得点は4.0です。同じ計算を1,000人それぞれについて行います。ストレスと生活満足度についても、各尺度の1〜4番と、逆転処理後の5番を足して5で割ります。

計算した点数を新しい変数として追加する

先ほどの例では、1人分の回答から社会的サポートの得点4.0を求めました。分析でこの得点を使うには、誰の得点がいくつなのかを、元のデータの各行に対応させて記録しておく必要があります。

CSVに入っているのは元の回答だけなので、Rに読み込んだデータに、計算結果を入れる列を追加します。このように新しい列を作ることが「変数を追加する」という操作です。ここでは、次の2段階で変数を追加します。

  1. 逆転処理後の点数を入れる列を作る。 例えば、support_5 の回答から 6 - support_5 を計算し、その結果を新しい列 support_5_r に入れます。元の回答を確認できるように、support_5 は残します。ストレスと生活満足度も同様に、stress_5_r と life_satisfaction_5_r を追加します。末尾の _r は、逆転処理後の点数であることを区別するために付けています。
  2. 5つの点数の平均を入れる列を作る。 社会的サポートなら、各行の support_1〜support_4 と、先ほど追加した support_5_r を足して5で割り、その結果を新しい列 support_mean に入れます。先ほどの例の人なら、この列に4.0が入ります。ストレスと生活満足度も、それぞれ同じ方法で平均を求め、新しい列に入れます。

この操作で、逆転処理後の点数を入れる3列と、尺度得点を入れる3列の、合計6列を追加します。計算と列の追加はRのコードで行うので、手元のCSVを直接編集する必要はありません。

尺度得点を入れる列の名前と、その得点の読み方を下の表にまとめます。変数名の mean は平均という意味です。3つの尺度得点はいずれも1〜5の範囲で、小数になることもあります。

尺度 尺度得点の変数名 得点が高い人ほど
社会的サポート support_mean 周囲の人に頼れると感じている
ストレス stress_mean ストレスを強く感じている
生活満足度 life_satisfaction_mean 生活に満足している

6 AIへの指示例

ここまでに確認した計算方法を、AIに伝える文章にしてみましょう。AIには、その文章をもとにRのコードを作ってもらいます。計算は、生成されたコードを自分のPositronで実行して行います。

AIは、手元のCSVにどのような変数があり、どの回答を逆転させるかを知りません。そのため、「尺度得点を計算して」と頼むだけでは、意図した計算になるとは限りません。そこで、データの内容はコードブックを読んでもらい、行ってほしい計算は指示の文章で伝えます。

以下では、AIへの指示を4つに分け、何を伝えるのかを順に確認します。途中の例文を一つずつAIに送る必要はありません。最後に全文をまとめているので、説明を読んだ後、その全文をコピーして使ってください。

1. 目的とデータの内容を伝える

最初に、Rで何をしたいのかを伝え、データの説明を添えます。チャットAIには、手元のファイル名や保存場所を伝えるだけでは、その内容を読んでもらえません。準備で保存したコードブックを、次のどちらかの方法で渡してください。

  1. ファイルを添付する場合: AIの入力欄に mock_survey_codebook.md を添付します。
  2. 文章を貼り付ける場合: Positronで mock_survey_codebook.md を開き、「データの概要」と「データの内容」をコピーして、指示文の末尾に貼り付けます。「データの内容」は、変数一覧とその下の補足までを含めてください。

変数名や値の範囲は、この説明書から伝えられるので、自分ですべて書き直す必要はありません。AIに渡すのはデータの説明だけで、mock_survey.csv の添付や回答データの貼り付けはしません。CSVの読み込みと計算は、生成されたコードを自分のPositronで実行して行います。

添付または末尾に貼り付けたデータの説明をもとに、社会的サポート・ストレス・生活満足度の尺度得点を計算するRコードを作ってください。
手元のmock_survey.csvをreadr::read_csv()で読み込むコードから始めてください。実行は私がPositronで行います。

2. 逆転処理の方法を伝える

次に、どの列を、どのように計算するかを指定します。「逆転処理して」だけで済ませず、対象が各尺度の5番であることと、6から元の回答を引くことを書きます。元の回答を残すため、計算結果を入れる新しい列の名前も伝えます。

各尺度の5番だけを、6から元の回答を引いて逆転処理してください。
元の回答の列は残し、計算結果をsupport_5_r、stress_5_r、life_satisfaction_5_rという新しい列に入れてください。

3. 平均の求め方と新しい変数名を伝える

続いて、尺度得点の計算を頼みます。ここで求めたいのは、1人分の5つの点数の平均です。「1人ずつ」と書き、1〜4番と逆転処理後の5番を使うことを明示します。計算結果をどの列に入れるかも指定しましょう。

1人ずつ、各尺度の1〜4番と逆転処理後の5番を足して5で割り、平均を求めてください。
結果はそれぞれsupport_mean、stress_mean、life_satisfaction_meanという新しい列に入れてください。

4. 計算を確認するための出力を頼む

コードを実行しても、計算結果を画面に表示しなければ、説明どおりに処理できたかを確認しにくくなります。そこで、データを読み込んだ直後と、尺度得点を計算した後に、確認用の値を表示するよう頼みます。

読み込み直後は、1,000行・25列で、地域AとBが各500人、欠損値が0個になっているかを確認します。尺度得点の計算後は、最小値と最大値が1〜5の範囲に収まっているかを確認します。ここで表示する平均値は、作成した尺度得点を1,000人分まとめて平均した値です。

読み込み直後に行数・列数、地域別人数、データ全体の欠損値の数を表示してください。
尺度得点を計算した後に、3つの尺度得点それぞれの最小値・最大値・平均値を表示してください。

まとめた指示をAIに送る

以下は、ここまでの4つをまとめた指示です。最後に、この教材と同じ書き方のコードになるように、使う関数などを指定しています。dplyr::mutate() は列を追加する関数で、|> は処理を順につなぐ記号です。コードを処理ごとに分け、それぞれの説明も付けてもらいます。

下の枠内の文章全体をコピーして、利用するAIの入力欄に貼り付けてください。コードブックを添付するか、上で説明した箇所を指示文の末尾に貼り付け、指示とデータの説明を一緒に送信してください。

ヒントコピーして使う指示例(全文)
添付または末尾に貼り付けたデータの説明をもとに、社会的サポート・ストレス・生活満足度の尺度得点を計算するRコードを作ってください。
手元のmock_survey.csvをreadr::read_csv()で読み込むコードから始めてください。実行は私がPositronで行います。

各尺度の5番だけを、6から元の回答を引いて逆転処理してください。
元の回答の列は残し、計算結果をsupport_5_r、stress_5_r、life_satisfaction_5_rという新しい列に入れてください。

1人ずつ、各尺度の1〜4番と逆転処理後の5番を足して5で割り、平均を求めてください。
結果はそれぞれsupport_mean、stress_mean、life_satisfaction_meanという新しい列に入れてください。

読み込み直後に行数・列数、地域別人数、データ全体の欠損値の数を表示してください。
尺度得点を計算した後に、3つの尺度得点それぞれの最小値・最大値・平均値を表示してください。

列の追加にはdplyr::mutate()を使い、処理をつなぐ場合はネイティブパイプ |> を使ってください。
コードは、読み込み、読み込み結果の確認、逆転処理、平均の計算、尺度得点の確認に分けてください。
各部分で何をしているのか、短い説明も付けてください。

AIからコードが返ってきたら、説明を読み、上から順にPositronで実行してください。出力された値を、このページの「検証チェックリスト」と照らし合わせましょう。コードの内容や出力を確かめたいときは、次の「参照コードと出力」を開いて見比べてください。

CSVが見つからない場合は、セットアップの「CSVが見つからない」で、ファイル名とRの作業フォルダを確認してください。

7 参照コードと出力

CSVを読み込みます。

survey <- readr::read_csv("mock_survey.csv", show_col_types = FALSE)

派生変数を作る前の構造を確認します。

dim(survey)
[1] 1000   25
dplyr::count(survey, region)
# A tibble: 2 × 2
  region     n
  <chr>  <int>
1 A        500
2 B        500
sum(is.na(survey))
[1] 0

元の回答を残し、反転後の列を別に作ります。

survey_scored <- survey |>
  dplyr::mutate(
    support_5_r = 6 - support_5,
    stress_5_r = 6 - stress_5,
    life_satisfaction_5_r = 6 - life_satisfaction_5
  )

各尺度の平均を計算します。反転前の5番を加えないようにしてください。

survey_scored <- survey_scored |>
  dplyr::mutate(
    support_mean = (support_1 + support_2 + support_3 + support_4 + support_5_r) / 5,
    stress_mean = (stress_1 + stress_2 + stress_3 + stress_4 + stress_5_r) / 5,
    life_satisfaction_mean = (life_satisfaction_1 + life_satisfaction_2 +
      life_satisfaction_3 + life_satisfaction_4 + life_satisfaction_5_r) / 5
  )

3尺度の得点を確認します。

survey_scored |>
  dplyr::select(support_mean, stress_mean, life_satisfaction_mean) |>
  summary()
  support_mean    stress_mean   life_satisfaction_mean
 Min.   :1.000   Min.   :1.00   Min.   :1.000         
 1st Qu.:2.200   1st Qu.:2.40   1st Qu.:2.400         
 Median :3.000   Median :3.00   Median :3.000         
 Mean   :2.967   Mean   :3.03   Mean   :3.006         
 3rd Qu.:3.600   3rd Qu.:3.60   3rd Qu.:3.800         
 Max.   :5.000   Max.   :5.00   Max.   :5.000         

8 検証チェックリスト

重要検証チェックリスト

9 練習問題

  1. 3尺度の5番の元回答が1、3、5のとき、反転後はいくつになるか確認してください。
  2. 逆転処理をせずに5項目の平均を取ると、なぜ得点の意味が変わるのか、質問文を使って説明してください。
  1. 反転後は順に5、3、1です。
  2. 5番だけは他の項目と反対の意味なので、そのまま平均すると得点の向きがそろいません。例えば、頼れる人がいないと強く回答するほど、サポートの得点を押し上げてしまいます。

10 発展(任意):模擬データを作り直す

配布しているCSVは、Rのプログラムで作成した架空のデータです。そのプログラムを自分で実行して、同じデータを作り直すこともできます。データがどのように作られているかに関心がある人は、試してみてください。分析の練習には配布済みのCSVを使えるので、この操作は必須ではありません。

生成用のファイルを用意する

生成スクリプト(R)をダウンロードし、Positronで開いている授業用フォルダに保存してください。ファイル名は make_mock_survey.R です。スクリプトとは、実行するコードをまとめて保存したファイルです。

以下では、授業用フォルダを開いた状態で、Rのコンソールにコードを順に入力して実行します。CSVの保存には、このページの「ファイルとRの準備」で用意した readr を使います。

データを作って別のCSVに保存する

まず、ダウンロードしたスクリプトを読み込みます。source() は、指定したRファイルのコードを読み込んで実行する関数です。このスクリプトの場合は、データを作るための関数が使えるようになります。この時点ではCSVは作られません。

source("make_mock_survey.R")

次に、スクリプトで定義された make_mock_survey() を実行します。これで1,000人分の模擬データが作られ、生成結果が generated に入ります。

generated <- make_mock_survey()

生成結果には、配布用のデータと、作成時の確認に使う情報が含まれています。そのうち、配布用のデータを取り出す書き方が generated$survey です。これをCSVとして保存します。

配布済みの mock_survey.csv を残すため、保存するファイル名は mock_survey_regenerated.csv とします。同じ名前のファイルがすでにある場合は上書きされるので、残したい場合は実行前に別の名前に変更してください。

readr::write_csv(generated$survey, "mock_survey_regenerated.csv")

実行後、Positronのファイル一覧に mock_survey_regenerated.csv があることを確認してください。ファイルを開くと、配布済みのCSVと同じ列名とデータが並んでいます。ここでも中身を見るだけにし、編集せずに閉じてください。

同じデータを作れる理由

このスクリプトでは、乱数を使って年齢や回答などの値を作っています。乱数を使う計算を再現できるようにする設定値を「シード」と呼びます。スクリプトではシードを 20260908 に固定しているので、コードや設定を変えずに実行すると、同じデータを作れます。

make_mock_survey.R をPositronで開くと、変数をどのような式や設定から作っているかを確認できます。式に使った係数もコメントに記載しています。

generated には、CSVに保存する survey のほかに、生成途中の値も含まれます。例えば、generated$latent は回答のもとになる潜在変数、generated$errors は生成時に加えたランダムな誤差です。これらはデータの作り方を検証するための情報で、配布用のCSVには含めていません。

模擬データはCC0、生成コードはMITライセンスです。

最終更新: 2026-10-02