如何用dcreate限制全因子设计选择数?Stata代码异常排查
解决Stata离散选择实验设计观测数异常问题
问题原因
原代码中genfact, levels(levmat)生成了全因子设计的所有2700个备选方案(计算:5×5×4×3×3×3=2700),后续执行dcreate时,默认会从这2700个备选里生成所有可能的2备选选择集,直接导致观测数远超预期。你需要的是正交部分因子设计,而非全因子的所有组合。
修正代码
直接跳过全因子生成步骤,用dcreate直接生成指定数量的选择集,再进行区块划分和变量重编码:
clear * 直接生成正交选择集:60个选择集,每个含2个备选方案 * 括号内为属性名及对应水平数:AA(5), AB(5), AC(4), AD(3), AE(3), AF(3) dcreate (AA 5) (AB 5) (AC 4) (AD 3) (AE 3) (AF 3), nalt(2) nset(60) /// bmat(-0.01 -0.1 0 0 0 0 0 0 0 0 0 0 0 0) * 将60个选择集划分为2个区块,每个区块30个选择集 blockdes block, nblock(2) * 按照需求对属性值重新编码 recode AA (1=-20) (2=-10) (3=0) (4=10) (5=20) // 对应原代码的TravTime recode AB (1=-20) (2=-10) (3=0) (4=10) (5=20) // 对应原代码的CouncilTax recode AD (1=-10) (2=0) (3=10) // 对应原代码的PrimDist list, separator(2)
关键说明
dcreate的正确用法:直接通过括号定义属性与水平数,nalt(2)指定每个选择集的备选方案数,nset(60)指定总选择集数量(匹配你2区块×30选择集的需求)。- 区块划分:
blockdes会自动将60个选择集均匀分配到2个区块中,每个区块30个选择集。 - 观测数对应:每个选择集含2个备选方案,因此总观测数为60×2=120。若你确实需要仅60个观测(即30个选择集),可将
nset(30),再用blockdes, nblock(2)划分为2个各15选择集的区块。
内容的提问来源于stack exchange,提问作者Jeff Lam
相关产品推荐
相关产品推荐

