如何从数据集中选择配额样本大家好
我正在开展一项研究,需要研究代表性样本。我已经收集了数据,但我需要选择一个满足代表性标准的子集,即 4:样本应满足以下配额:
-
性别方面:男性50%,女性50%。
-
年龄结构:1/3为18至30岁,1/3为31至50岁,1/3为51岁以上。
-
按家庭收入水平划分:1/3 来自低收入,1/3 来自中等收入,1/3 来自高收入。
该市五个区域(北区、南区、中区、东区和西区)各占研究人口的 1/5
我如何创建这个示例?
我正在使用 JMP pro 17
数据访问数据混合和清理回复:如何从数据集中选择配额样本听起来像是教科书上的练习——是否有一章给出解决方案?
回复:如何从数据集中选择配额样本不
我实际上正在与一位同事讨论这个问题,用这种配额抽样技术开始一个项目的数据分析。回复:如何从数据集中选择配额样本这是一个复杂的问题。您从多大的数据表中提取数据。您提取的样本量有多大?您的 4 列有 90 种组合。您和您的同事是否想出了如何解决这个问题的主意?
回复:如何从数据集中选择配额样本而且您不想根据分布的实际份额来选择样本数据,而是根据人为的分数来选择样本数据?
女性、> 51 岁、高收入、北方人怎么样?
它应该是 1/2 * 1/3 * 1/3 * 1/5 吗?(*)
这很容易计算 - 但可能太严格了 - 并且不是有意的?
试想一下原始分布中没有女性、> 51 岁、高收入、北部的情况。
另一方面:如果只需满足 1/2、1/3、1/3 和 1/5,则可以使用 0 个女性、> 51 岁、高收入、北方的样本数据来构成极端情况。
回复:如何从数据集中选择配额样本这并不优雅,我甚至不确定它是否会起作用,但它可能会起作用。您可以为每个标准创建 0,1 列,然后将它们组合成单个 0,1 列,其中 1 表示所有单个标准列都 =1。这将给出所需的子集。并且,如果您想从这些行中随机选择,只需使用由该 0,1 列分层的验证列。正如我所说,这并不优雅,但可能会起作用。
回复:如何从数据集中选择配额样本数据表-理想情况:
New Table( "quota_samples",
Add Rows( 100000 ),
Compress File When Saved( 1 ),
New Column( "gender",
Character,
Formula( Match( Floor( Random Uniform() * 2 ), 0, "M", "F" ) ),
Compact(),
Set Selected
),
New Column( "income",
Character,
Formula(
Match( Floor( Random Uniform() * 3 ), 0, "low", 1, "medium", "high" )
),
Compact()
),
New Column( "region",
Character,
Formula(
Match( Floor( Random Uniform() * 5 ),
0, "N",
1, "S",
2, "W",
3, "E",
"C"
)
)
),
New Column( "age",
Character,
Formula(
Match( Floor( Random Uniform() * 3 ), 0, "young", 1, "medium", "old" )
)
)
)
回复:如何从数据集中选择配额样本对于这样一个理想的表格,(如果您的数据集的概率适合您想要的分数),您可以选择随机样本 - 每个变体的随机样本或每个变体的特定数量的样本 - 或所有这三个的组合......
您将始终获得具有所需分数的子群(1/2、1/3、1/3 和 1/5)

// random sampling : full data set
if(not(current data table() << has column ("cum_prob")),New Column( "cum_prob",
Formula(
Col Rank( random uniform()) / (
Col Number( 1 ))
)
));
// random sampling : per variant
if(not(current data table() << has column ("cum_prob_indiv")),New Column( "cum_prob_indiv",
Formula(
tmp = random uniform(); // tmp =1; // **)
Col Rank( tmp, :gender, :income, :region, :age ) / (
Col Number( tmp, :gender, :income, :region, :age ))
)
));
// force ratios: 1/2, 1/3, 1/3, 1/5
if(not(current data table() << has column ("rank_indiv")),
New Column( "rank_indiv",
Formula( Col Rank( random uniform(), :gender, :income, :region, :age ) )
));
Graph Builder(
Size( 518, 448 ),
Show Control Panel( 0 ),
Graph Spacing( 4 ),
Variables( X( :gender ), X( :income ), X( :region ), X( :age ) ),
Elements( Position( 1, 1 ), Bar( X, Summary Statistic( "N" ) ) ),
Elements( Position( 2, 1 ), Bar( X, Summary Statistic( "N" ) ) ),
Elements( Position( 3, 1 ), Bar( X, Summary Statistic( "N" ) ) ),
Elements( Position( 4, 1 ), Bar( X, Summary Statistic( "N" ) ) ),
Local Data Filter(<BR /> Title( "how many samples do you want ? " ),
Add Filter(
columns( :cum_prob, :cum_prob_indiv, :rank_indiv )
)
)
);
**)而不是使用带有随机 uniform() 的CDF,可以随机化行顺序并使用“1”的 CDF。
回复:如何从数据集中选择配额样本最后一个选项也适用于不太系统化的表格,比如下面的表格。
唯一的限制是,如果特定变体的样本很少,则可选择的样本数量就会有明显的限制。
它遵循简单的规则:
如果对于其中一个变体(A)只有 N 个样本,则取这些样本并从其他变体中挑选相同数量的随机样本。
实际上,对于变体“A”,这不是采样。
因此,也许只选择 M << N 个样本 - 从所有变体中随机选择。
您可以采用相同的(JSL)逻辑 - 只需将 N 调整为较低的值。
variants = {};
For Each( {gender}, {"F", "M"},
For Each( {age}, {"young", "medium", "old"},
For Each( {income}, {"low", "medium", "high"},
For Each( {region}, {"N", "S", "E", "W", "C"},
Insert Into( variants, Concat Items( {gender, age, income, region} ) )
)
)
)
);
Eval(
Eval Expr(
new table(
"unfair",
add rows( 100000 ),
New Column( "variant",Character,
formula(
variants = As constant(Expr( variants ));
Try(
variants[Floor( Random Normal( 45, 30 ) )],
"F young medium C"
);
)
),
New column ("gender",Character, formula(Word(1,:variant))),
New column ("age",Character, formula(Word(2,:variant))),
New column ("income",Character, formula(Word(3,:variant))),
New column ("region",Character, formula(Word(4,:variant))),
)
)
);
回复:如何从数据集中选择配额样本我花了很多时间思考这个问题,但没有想出一个好的答案。我确实生成了一个类似于@hogi 的示例数据表。下面是我使用的代码对@hogi JSL 的修改。基本上,我认为它更容易阅读,并且在 Age 的情况下,它更好地代表了@Samira所述的分布。
New Table( "Samp",
Add Rows( 100000 ),
Compress File When Saved( 1 ),
New Column( "gender",
Character,
Set Each Value( Match( Random Integer( 1, 2 ), 1, "Male", "Female" ) ),
Compact()
),
New Column( "income",
Character,
Set Each Value(
Match( Random Integer( 1, 3 ), 1, "Low", 2, "Medium", "High" )
),
Compact()
),
New Column( "region",
Character,
Set Each Value(
Match( Random Integer( 1, 5 ),
1, "North",
2, "South",
3, "West",
4, "East",
"Ccentre"
)
)
),
New Column( "age",
Character,
Set Each Value(
temp = Random Integer( 18, 80 );
If(
temp <= 30, "Young",
temp <= 50, "Middle Age",
"Old"
);
)
)
)
回复:如何从数据集中选择配额样本谢谢你的回复
这个想法是针对整个城市人口的代表性样本进行研究
回复:如何从数据集中选择配额样本非常感谢你的努力
您的建议给了我一个很好的想法,即首先使用图形生成器中的本地数据过滤器来有效地探索我的数据集。对于我的数据,似乎对于某些组合(例如居住在中心地区且收入为 IM 的中年男性),样本为 0
以这种方式创建代表性样本的整个想法现在看来并不实用。从一开始就应该使用的抽样技术是概率抽样技术之一。可能是分层随机抽样,仅使用 5 个区域作为层。然后从每个层收集随机样本。
回复:如何从数据集中选择配额样本非常感谢您付出的时间和努力
以这种方式创建代表性样本的整个想法现在看来并不实用。从一开始就应该使用的抽样技术是概率抽样技术之一。可能是分层随机抽样,仅使用 5 个区域作为层。然后从每个层收集随机样本。
回复:如何从数据集中选择配额样本谢谢你的回复
我认为你是对的,
以这种方式创建代表性样本的整个想法现在看来并不实用。从一开始就应该使用的抽样技术是概率抽样技术之一。可能是分层随机抽样,仅使用 5 个区域作为层。然后从每个层收集随机样本。
回复:如何从数据集中选择配额样本这听起来是个合理的方法
回复:如何从数据集中选择配额样本因此,您在原始帖子中要求的是:
不比例分层随机抽样,对吗?
阶层包括性别、年龄、收入、地区的 90 个子群。
回复:如何从数据集中选择配额样本在仔细修改了教科书中的各种抽样技术后,我发现我最初的想法与其中任何一种都不相符。要获得有代表性的样本,您应该选择一种概率抽样技术(为研究人群中的每个受访者提供被纳入样本的相等概率或机会)。这些技术包括 4 种类型:
这就是为什么我认为从一开始就可以使用分层抽样来获取研究样本(仅使用 5 个区域作为层。然后,从每个层收集随机样本)。分层、聚类和配额抽样技术需要将总体划分为互斥组,而我的问题中的情况并非如此。这就是为什么我认为我的原始问题从一开始就不正确。
:
回复:如何从数据集中选择配额样本嗯,当我们将此案例与 DOE 进行比较时……
在精心设计的 DOE 中,人们甚至不会从 90 个子集中挑选一个(单个)样本。
[从 90 个子集各取 1 个样本:“全因子” -> “昂贵” 的方式]
那么,也许除了对模型进行一些简化之外,在这里使用一些交叉点中缺少条目的数据集也是可以的?再进一步,也许通过故意从某些交叉点中删除(一些数据点),人们可以在分层输入数据和平衡 DOE 之间得到一些有用的东西?
@Victor_G可能有什么建议?
回复:如何从数据集中选择配额样本
回复:如何从数据集中选择配额样本对于“随机抽样 - 每个变体”方法
https://community.jmp.com/t5/Discussions/How-to-Select-a-quota-sample-from-a-data-set/mp/821078/highlight/true#M100011
我创建了一个 JSL 代码片段来对任意数据进行分层 - 只需选择列并单击“确定”即可。
librecall 可以在这里下载: Recall 函数库
Names Default To Here( 1 );
verbose=0;
//Include( ".\libRecall_v2.jsl" );
objects = {"si^myCols", "s^Ncolumns", "s^Nfolds"};
values = {{}, {1}, {5}};
Try( // issue with projects
librecall:genArrays( objects, values, "Stratify", verbose )
);
dt = Current Data Table();
nw = New Window( "K Fold Creator",
<<TYPE></TYPE>回复:如何从数据集中选择配额样本嗨@hogi和@Samira ,
只需快速阅读帖子和答案,我仍然不完全清楚您的目标,因为“代表性”数据集可能有不同的含义:
您是否想根据人口统计数据(年龄、性别、位置等)更好地理解和模拟反应/现象,或者您是否想要一个“代表性”样本以便对人口进行一些推断/概括?
- 在第一种情况下,因为您希望将响应/现象链接到特定属性,所以最好有一个平衡的数据集,因此在年龄、性别、位置等方面具有平衡的水平......以便更容易地对结果进行建模和解释。
使用 DoE 方法,要么“从头”构建您的定制设计并找到与不同属性相对应的合适人选,要么使用收集的人口统计数据的候选集方法构建您的 D 最优设计,这将帮助您尽可能独立和单独地调查和分析不同的人口统计因素。
- 在第二种情况下,由于您想将样本结果推广到总体,因此您需要有一个具有代表性的样本(与总体一样“有偏差”)。因此,也许您不会得到 50/50 的男性/女性比例,因为总体可能会偏向 40/60,因此您需要尊重这种人口统计学特异性。
使用分层方法对您在 5 个地区收集的人口统计数据进行分析可能会有所帮助。您可能需要考虑两个方面:根据人口创建区域样本(确保您的样本相对于区域人口的比例相同,因此人口密集/稠密的区域在样本数据集中会有更多的人)和基于人口统计数据(性别、年龄等...)。
在这两种情况下,我都建议收集尽可能多的有关 5 个地区人口的数据,以便更好地理解和告知您的样本创建方法。
另外,您还可以找到有关人口统计数据细分的文献,我不确定这里提出的年龄细分是否真的有用,因为年龄范围不同:18-30(12 岁)、31-50(19 岁)、51+(20+ 岁?)。另外,您如何定义家庭收入水平低/中和高?基于分析还是预定义的阈值/标准?
有关人口细分的一些示例: https://xperiencify.com/what-is-demographic-segmentation/
希望这个答案能提供一些想法,