异常处理
卡方检验
卡方检验(chi-square,记为
根本思想:比较实际频次
使用的情况:当事实与期望不符合情况下使用卡方分布进行检验,看是否系统出了问题,还是属于正常波动。利用卡方分布分析结果,排除可疑结果。
作用: 主要用于比较两个及两个以上的样本率或分类变量的关联性分析。检查实际结果与期望结果之间何时存在显著差异。
- 检验拟合程度:可以检验一组给定数据与指定分布的吻合程度。如:检验抽奖机收益的观察频数与我们所期望的吻合程度。
- 检验两个变量的独立性:通过这个方法,检查变量之间是否存在某种关系。
步骤:
- 确定要进行检验的假设H0,及其备择假设H1。
- 求出期望E。
- 确定用于做决策的拒绝域(右尾)。
- 根据自由度和显著性水平查询检验统计量临界值。
- 查看检验统计量是否在拒绝域内。
- 做出决策。
实例:
TEST_F(GPSUpdateTest, Chi2WithStdDev0_5Test) {
double mean = 0.0;
double std_dev = 0.5;
std::default_random_engine generator;
std::normal_distribution<double> noise_distribution(mean, std_dev);
std::shared_ptr<State> state = sys->get_state();
init_state.block(0, 0, 4, 1) << 0, 0, 0, 1; // q
init_state.block(4, 0, 3, 1) << 0.5, 0.5, 0.5; // p
init_state.block(7, 0, 3, 1) << 1, 1, 1; // v
state->_imu->set_value(init_state);
ov_core::GPSData data;
data.timestamp = 0;
data.id = 0;
data.meas << 0.5 + noise_distribution(generator), 0.5 + noise_distribution(generator), 0.5 + noise_distribution(generator);
data.noise << 0, 0, 0;
std::shared_ptr<Type> posetemp = StateHelper::clone(state, state->_imu->pose());
std::shared_ptr<PoseJPL> pose = std::dynamic_pointer_cast<PoseJPL>(posetemp);
state->_clones_IMU[data.timestamp] = pose;
bool success = update(state,data);
ASSERT_EQ(true, success);
}