Clustered Variance模块调整聚类的标准误。例如,将一个数据集合复制100次,不应该增加参数估计的精度,但是在符合独立同分布假设(Independent Identically Distributed,IID)下执行这个过程实际上会提高精度。另一个例子是在教育经济学的研究中,有理由期望同一个班里孩子的误差项不是独立的。聚类标准误可以解决这个问题。
MADlib的聚类方差(Clustered Variance)模块包含计算线性、逻辑和多类逻辑回归问题的函数。
聚类方差线性回归训练函数
聚类方差线性回归训练函数具有以下语法:
clustered_variance_linregr ( source_table,
out_table,
dependent_varname,
independent_varname,
clustervar,
grouping_cols
)
参数
source_table:TEXT类型,包含训练数据的表的名称。
out_table:VARCHAR类型,包含输出模型的生成表的名称。输出表包含以下列:
还会创建一个名为<out_table>_summary的汇总表,它与linregr_train函数创建的汇总表相同。有关详细信息,请参阅线性回归的文档。
dependent_varname:TEXT类型,用于评估因变量的表达式。
independent_varname:TEXT类型,用于评估自变量的表达式。
clustervar:TEXT类型,用作聚类变量列的逗号分隔列表。
grouping_cols(可选):TEXT类型,缺省值为NULL,当前未实现,忽略任何非NULL值。一个列表表达式,类似于SQL GROUP BY子句,用于将输入数据集分组为离散组,每组运行一次回归。当此值为空时,不使用分组,并生成单个结果模型。
聚类方差逻辑回归训练函数
聚类方差逻辑回归训练函数具有以下语法:
clustered_variance_logregr( source_table,
out_table,
dependent_varname,
independent_varname,
clustervar,
grouping_cols,
max_iter,
optimizer,
tolerance,
verbose_mode
)
参数
source_table:TEXT类型,包含训练数据的表的名称。
out_table:VARCHAR类型,包含输出模型的生成表的名称。输出表包含以下列:
还会创建一个名为<out_table>_summary的汇总表,它与logregr_train函数创建的汇总表相同。有关详细信息,请参阅逻辑回归的文档。
dependent_varname:TEXT类型,用于评估因变量的表达式。
independent_varname:TEXT类型,用于评估自变量的表达式。
clustervar:TEXT类型,用作聚类变量列的逗号分隔列表。
grouping_cols(可选):TEXT类型,缺省值为NULL,当前未实现,忽略任何非NULL值。一个列表表达式,类似于SQL GROUP BY子句,用于将输入数据集分组为离散组,每组运行一次回归。当此值为空时,不使用分组,并生成单个结果模型。
max_iter(可选):INTEGER类型,缺省值为20。允许的最大迭代次数。
Optimizer(可选):TEXT类型,缺省值为‘irls’。使用的优化器名称:
Tolerance(可选):FLOAT8类型,缺省值为0.0001。表明收敛的连续迭代中对数似然值之间的差异,以便在n次迭代完成后停止执行。零不能用作收敛标准。
verbose_mode(可选):BOOLEAN类型,缺省值为FALSE。提供训练结果的详细输出。
聚类方差多类逻辑回归训练函数
clustered_variance_mlogregr( source_table,
out_table,
dependent_varname,
independent_varname,
cluster_varname,
ref_category,
grouping_cols,
optimizer_params,
verbose_mode
)
参数
source_table:TEXT类型,包含输入数据的表的名称。
out_table:TEXT类型,存储回归模型的表的名称。输出表包含以下列:
还会创建一个名为<out_table>_summary的汇总表,它与mlogregr_train函数创建的汇总表相同。有关详细信息,请参阅多类逻辑回归的文档。
dependent_varname:TEXT类型,用于评估因变量的表达式。
independent_varname:TEXT类型,用于评估自变量的表达式。
cluster_varname TEXT类型,用作聚类变量列的逗号分隔列表。
ref_category(可选):INTEGER类型,范围在[0,num_category)中的引用类别。
groupingvarng_cols(可选):TEXT类型,缺省值为NULL,当前未实现,忽略任何非NULL值。用作分组变量的逗号分隔列列表。
optimizer_params(可选):TEXT类型,缺省值为NULL,使用优化器参数的默认值: max_iter=20, optimizer=‘newton’, tolerance=1e-4。应该是一个包含由逗号分隔的‘key = value’对的字符串。
verbose_mode(可选):BOOLEAN类型,缺省值为FALSE。如果为TRUE,则在计算逻辑回归时打印详细信息。
Cox比例风险模型的聚类方差
Cox比例危险模型的聚类稳健方差估计函数具有以下语法:
clustered_variance_coxph(model_table,output_table, clustervar)
参数
model_table:TEXT类型。模型表的名称,与coxph_train()函数的‘output_table’参数完全相同。
output_table:TEXT类型。保存输出表的名称,有以下几列:
clustervar:TEXT类型,用作聚类变量列的逗号分隔列表。
示例
1. 查看聚类方差线性回归函数的联机帮助。
SELECT madlib.clustered_variance_linregr();
2. 运行线性回归函数并查看结果。
DROP TABLE IF EXISTS out_table;
SELECT madlib.clustered_variance_linregr( 'abalone',
'out_table',
'rings',
'ARRAY[1, diameter, length, width]',
'sex',
NULL
);
SELECT * FROM out_table;
3. 查看聚类方差逻辑回归函数的联机帮助。
SELECT madlib.clustered_variance_logregr();
4. 运行逻辑回归函数并查看结果。
DROP TABLE IF EXISTS out_table;
SELECT madlib.clustered_variance_logregr( 'abalone',
'out_table',
'rings < 10',
'ARRAY[1, diameter, length, width]',
'sex'
);
SELECT * FROM out_table;
5. 查看聚类方差多类逻辑回归函数的联机帮助。
SELECTmadlib.clustered_variance_mlogregr();
6. 运行多类逻辑回归并查看结果。
DROP TABLE IF EXISTS out_table;
SELECT madlib.clustered_variance_mlogregr( 'abalone',
'out_table',
'CASE WHEN rings < 10 THEN 1 ELSE 0 END',
'ARRAY[1, diameter, length, width]',
'sex',
0
);
SELECT * FROM out_table;
7. 运行Cox比例风险回归,并计算聚类稳健估计。
DROP TABLE IF EXISTS lung_cl_out;
DROP TABLE IF EXISTS lung_out;
DROP TABLE IF EXISTS lung_out_summary;
SELECT madlib.coxph_train('lung',
'lung_out',
'time',
'array[age, "ph.ecog"]',
'TRUE',
NULL,
NULL);
SELECT madlib.clustered_variance_coxph('lung_out',
'lung_cl_out',
'"ph.karno"');
SELECT * FROM lung_cl_out;
注意
请注意,我们需要在自变量表达式中手动包含一个截距项。groupingvar的NULL值表示在计算中没有分组。
技术背景
假设数据可以分成
个簇。通常这可以通过根据一列或多列对数据表进行分组来完成。估计量与通常的三明治估计量具有相似的形式:
面包部分与Huber-White三明治估计量相同
其中
是作为目标函数二阶导数的黑塞矩阵:
肉的部分是不同的:
其中
的第
行为:
其中
是属于同一个聚类的一组行。
我们可以通过一个聚合函数在一次扫描数据表期间,计算每个聚类的
和
的数量,然后在聚合函数外部将所有聚类汇总得到完整
和
。最后,矩阵多项式在主节点上的一个单独的函数中完成。
在计算多类逻辑回归的聚类方差时,它使用默认的参考类别为零,回归系数包含在输出表中。输出的回归系数与多类逻辑回归函数的顺序相同。对于K个因变量(1,...,K)和J个类别(0,...,J-1)的问题,令
表示因变量k和类别j的系数。输出是
。该顺序与函数marginal_mlogregr的多类回归边际效应计算不一致。这是故意为之,因为所有多类回归(稳健、聚类、...)的接口将被移动到匹配边际效应使用的接口中。