FactorialSurvey を更新しました
2026年11月2日
要因サーベイ実験(ファクトリアルサーベイ実験、FSE)のためのRパッケージ FactorialSurvey の開発版(0.2.0.9000)を GitHub で公開しました。2025年に公開した版から、ビネットの設計、実査の準備、必要な回答者数の検討、推定、支払意思額(WTP)の計算までを、一つのパッケージで通して行えるようになっています。
以前の版を使っていた方に影響する修正(設計のバグ修正と関数の引数名の変更)も含まれているので、以前の版を使っていた方へもあわせてご覧ください。
主な更新内容
設計
D効率的な設計を作る fs_defficient() の不具合を修正し、D効率を標準的な定義(直交計画で100%)で表示するようにしました。A効率も表示します。新しい fs_efficiency() は、他のソフトで作った設計や過去の設計も評価できます。
実査の準備
fs_assign() がブロックと提示順を回答者に割り付けます。提示順はウィリアムズ計画に基づき、順序効果と持ち越し効果を均等にします。fs_vignette_text() でビネットの文章を作り、fs_export() で CSV、Excel、Qualtrics の Loop & Merge 用の表に書き出せます。
必要な回答者数
fs_power() は、想定した効果のもとで調査をシミュレーションし、回答者数ごとに各効果を検出できる確率(検出力)と WTP の精度を示します。fs_simulate_ratings() で模擬データも作れます。
推定
0〜10点などの評定にはベータ回帰(fs_betareg())、受け入れる/受け入れないの二値回答にはロジット(fs_logit())を使います。どちらも cluster = ~ id で回答者単位のクラスター頑健標準誤差を計算します。1〜7点や0〜100点の尺度にも対応しました。
支払意思額
fs_mwtp() は属性ごとの限界支払意思額(MWTP)を一括で計算します。区間はデルタ法、Krinsky–Robb 法、Fieller 法から選べます。新しい fs_ewtp() は、属性の組み合わせ(政策シナリオ)全体の期待支払意思額(EWTP)を Tanaka et al. (2027) の方法で計算します。
図とデータ
推定結果と WTP は plot() で図にできます(ggplot2、白黒印刷向け)。授業で集めた弁当の評価データ bento(学生48人×8ビネット)を同梱し、英語の解説(ビネット)を追加しました。
以前の版を使っていた方へ
数値の水準で作った設計を確認してください
以前の fs_defficient() には、属性の水準を数値(1:3 や c(400, 600, 800) など)で与えると、その属性を連続変数として扱ってしまう不具合がありました。この場合、設計は直線の傾きを推定するのに最適化されるため、中間の水準がほとんど、あるいはまったく選ばれず、その水準の効果を推定できない設計になることがありました。今回の版では、すべての属性を水準のカテゴリとして扱います。
過去にこの方法で作った設計は、fs_efficiency() に本来の水準を渡すと、欠けている水準を確認できます。
fs_efficiency(old_design,
factors = list(price = c(400, 600, 800), time = 1:3))
D効率の値が変わりました
以前の版が表示していた D効率の値は正確ではありませんでした。今回から Kuhfeld, Tobias and Garratt (1994) の定義に改め、直交計画で100%になる値を表示します。以前の値とは比べられないので、ご注意ください。
関数の使い方の変更
| 以前 | 今回の版 |
|---|---|
fs_mwtp(model_results = result, variable_name = "side", price_variable_name = "price") | fs_mwtp(result, variable = "side", price = "price")( variable を省くと全属性を一括で計算) |
fs_betareg() を実行すると結果が表示される | 結果はオブジェクトに保存され、summary() で表示(係数、適合度、平均限界効果) |
fs_post_estimate()(以前のこのページの案内) | この関数はありません。適合度は summary() に含まれます |
set_lavels() | set_labels()(綴りの誤りを修正) |
クラスター頑健標準誤差
要因サーベイ実験では一人が複数のビネットを評価するため、同じ回答者の回答は互いに相関します。fs_betareg() と fs_logit() で cluster を指定しないと、警告を出すようにしました。回答者を独立とみなしてよい場合は cluster = FALSE を指定してください。
使い方
インストール
install.packages("remotes")
remotes::install_github("tanakak/FactorialSurvey")
library(FactorialSurvey)
ビネットを設計する
属性と水準をリストで与えると、D効率的な16個のビネットを作り、2つのブロックに分けます。
attrs <- list(
main = c("grilled fish", "teriyaki chicken", "tofu hamburger"),
side = c("no", "yes"),
info = c("no", "yes"),
price = c(700, 900, 1100, 1300)
)
design <- fs_defficient(attrs, n_vignettes = 16, n_blocks = 2, seed = 1)
fs_efficiency(design)
Design efficiency
Vignettes : 16
Parameters : 8
D-efficiency : 98.3%
A-efficiency : 96.6%
推定して支払意思額を求める
同梱の bento データ(主菜・副菜・栄養表示・価格を変えた弁当を、0=絶対に買わない〜10=絶対に買う で評価)で、ベータ回帰を推定します。
fit <- fs_betareg(rating ~ main + side + info + price,
data = bento, cluster = ~ respondent)
summary(fit)
fs_mwtp(fit, price = "price")
variable MWTP SE lower upper
mainteriyaki chicken 468.7263 82.2896 307.4416 630.0109
maintofu hamburger 62.6008 68.8856 -72.4125 197.6141
side 209.9063 56.8564 98.4699 321.3427
info 84.6877 49.3522 -12.0409 181.4163
この例では、主菜が焼き魚から照り焼きチキンに変わることの MWTP が約469円、副菜が付くことの MWTP が約210円と推定されます。豆腐ハンバーグと栄養表示は、95%信頼区間が0をまたいでいます。
弁当全体の価値は fs_ewtp() で求めます。価格以外の属性の組み合わせを1行ずつ指定します。
boxes <- data.frame(
main = c("grilled fish", "teriyaki chicken"),
side = c(0, 1), info = c(0, 1),
row.names = c("Fish, plain", "Chicken, full")
)
fs_ewtp(fit, boxes, price = "price")
scenario EWTP SE lower upper
Fish, plain 536.2 69.58 399.8 672.6
Chicken, full 1083.0 101.50 884.1 1282.0
CSV ファイルの読み込みから図の作成までを通したスクリプトは、FactorialSurvey のページの Quick start(fs_demo.R)にあります。設計から必要な回答者数の検討までを含む解説は、英語のビネット「Getting started with FactorialSurvey」をご覧ください。
検証
- 556件の自動テストを用意し、CRAN と同じ基準のチェック(
R CMD check --as-cran)を、Linux(R の開発版・現行版・一つ前の版)、Windows と macOS(R の現行版)で通過しています。 - D効率、クラスター頑健標準誤差、MWTP と EWTP およびその標準誤差を、パッケージとは別に組んだ計算と照合し、一致を確認しました。
- シミュレーション(400回)では、MWTP の95%信頼区間が真の値を含む割合は 0.968(評定)と 0.953(二値回答)、EWTP は 0.945 でした。
- 回答者の属性(性別など)の効果について、回答の相関を無視した標準誤差では95%信頼区間が真の値を含む割合が 0.79 にとどまり、クラスター頑健標準誤差では 0.925 でした。回答者の数が少ない場合、クラスター頑健標準誤差もやや小さめに出る傾向があります。
今後の予定
CRAN への登録
Windows 環境での R 開発版のチェックなど、提出前の確認を終えたうえで、CRAN(R の公式パッケージ配布サイト)への登録を申請する予定です。登録されれば install.packages("FactorialSurvey") でインストールできるようになります。
論文と書籍
パッケージの設計と推定の方法を説明する英語の論文と、要因サーベイ実験の考え方からパッケージを使った分析までを解説する日本語の書籍を準備しています。
今後追加を検討している機能
- 評定の端(0点や10点)に回答が集まるデータに対応した順序ベータ回帰
- 回答者による違いを扱うマルチレベルモデルと潜在クラスモデル
- 政策シナリオごとの予測と厚生の計算
- 回答者数が少ないときのクラスター頑健標準誤差の補正(CR2 など)
不具合の報告や機能の要望は、GitHub Issues で受け付けています。
引用
研究でパッケージを使用された場合は、次の論文を引用してください。
- Tanaka, K. (2025). A Unified Framework for Estimating Willingness to Pay Using Factorial Survey Experiments. SSRN Working Paper. DOI