static gboolean tool_random_engine_run_landau (data_analysis_output_t *dao, tools_data_random_t *info) { int i, n; for (i = 0; i < info->n_vars; i++) { for (n = 0; n < info->count; n++) { gnm_float v; v = random_landau (); dao_set_cell_float (dao, i, n, v); } } return FALSE; }
static gboolean tool_random_engine_run_beta (data_analysis_output_t *dao, tools_data_random_t *info, beta_random_tool_t *param) { int i, n; for (i = 0; i < info->n_vars; i++) { for (n = 0; n < info->count; n++) { gnm_float tmp = random_beta (param->a, param->b); dao_set_cell_float (dao, i, n, tmp); } } return FALSE; }
static gboolean tool_random_engine_run_gaussian_tail (data_analysis_output_t *dao, tools_data_random_t *info, gaussian_tail_random_tool_t *param) { int i, n; for (i = 0; i < info->n_vars; i++) { for (n = 0; n < info->count; n++) { gnm_float v; v = random_gaussian_tail (param->a, param->sigma); dao_set_cell_float (dao, i, n, v); } } return FALSE; }
static gboolean tool_random_engine_run_fdist (data_analysis_output_t *dao, tools_data_random_t *info, fdist_random_tool_t *param) { int i, n; for (i = 0; i < info->n_vars; i++) { for (n = 0; n < info->count; n++) { gnm_float v; v = random_fdist (param->nu1, param->nu2); dao_set_cell_float (dao, i, n, v); } } return FALSE; }
static gboolean tool_random_engine_run_normal (data_analysis_output_t *dao, tools_data_random_t *info, normal_random_tool_t *param) { int i, n; for (i = 0; i < info->n_vars; i++) { for (n = 0; n < info->count; n++) { gnm_float v; v = param->stdev * random_normal () + param->mean; dao_set_cell_float (dao, i, n, v); } } return FALSE; }
static gboolean tool_random_engine_run_uniform (data_analysis_output_t *dao, tools_data_random_t *info, uniform_random_tool_t *param) { int i, n; gnm_float range = param->upper_limit - param->lower_limit; for (i = 0; i < info->n_vars; i++) { for (n = 0; n < info->count; n++) { gnm_float v; v = range * random_01 () + param->lower_limit; dao_set_cell_float (dao, i, n, v); } } return FALSE; }
static gboolean analysis_tool_normality_engine_run (data_analysis_output_t *dao, analysis_tools_data_normality_t *info) { guint col; GSList *data = info->base.input; GnmFunc *fd; GnmFunc *fd_if; char const *fdname; char const *testname; char const *n_comment; GogGraph *graph = NULL; GogPlot *plot = NULL; SheetObject *so; switch (info->type) { case normality_test_type_andersondarling: fdname = "ADTEST"; testname = N_("Anderson-Darling Test"); n_comment = N_("For the Anderson-Darling Test\n" "the sample size must be at\n" "least 8."); break; case normality_test_type_cramervonmises: fdname = "CVMTEST"; testname = N_("Cram\xc3\xa9r-von Mises Test"); n_comment = N_("For the Cram\xc3\xa9r-von Mises Test\n" "the sample size must be at\n" "least 8."); break; case normality_test_type_lilliefors: fdname = "LKSTEST"; testname = N_("Lilliefors (Kolmogorov-Smirnov) Test"); n_comment = N_("For the Lilliefors (Kolmogorov-Smirnov) Test\n" "the sample size must be at least 5."); break; case normality_test_type_shapirofrancia: fdname = "SFTEST"; testname = N_("Shapiro-Francia Test"); n_comment = N_("For the Shapiro-Francia Test\n" "the sample size must be at\n" "least 5 and at most 5000."); break; default: g_assert_not_reached(); } fd = gnm_func_lookup_or_add_placeholder (fdname); gnm_func_ref (fd); fd_if = gnm_func_lookup_or_add_placeholder ("IF"); gnm_func_ref (fd_if); dao_set_italic (dao, 0, 0, 0, 5); dao_set_cell (dao, 0, 0, _(testname)); if (info->graph) { GogChart *chart; graph = g_object_new (GOG_TYPE_GRAPH, NULL); chart = GOG_CHART (gog_object_add_by_name ( GOG_OBJECT (graph), "Chart", NULL)); plot = gog_plot_new_by_name ("GogProbabilityPlot"); go_object_set_property (G_OBJECT (plot), "distribution", "Distribution", "GODistNormal", NULL, NULL); gog_object_add_by_name (GOG_OBJECT (chart), "Plot", GOG_OBJECT (plot)); } /* xgettext: * Note to translators: in the following string and others like it, * the "/" is a separator character that can be changed to anything * if the translation needs the slash; just use, say, "|" instead. * * The items are bundled like this to increase translation context. */ set_cell_text_col (dao, 0, 1, _("/Alpha" "/p-Value" "/Statistic" "/N" "/Conclusion")); dao_set_cell_comment (dao, 0, 4, _(n_comment)); for (col = 1; data != NULL; data = data->next, col++) { GnmValue *val_org = value_dup (data->data); /* Note that analysis_tools_write_label may modify val_org */ dao_set_italic (dao, col, 0, col, 0); analysis_tools_write_label (val_org, dao, &info->base, col, 0, col); if (info->graph) { GogSeries *series; series = gog_plot_new_series (plot); gog_series_set_dim (series, 0, gnm_go_data_vector_new_expr (val_org->v_range.cell.a.sheet, gnm_expr_top_new (gnm_expr_new_constant (value_dup (val_org)))), NULL); } if (col == 1) dao_set_cell_float (dao, col, 1, info->alpha); else dao_set_cell_expr (dao, col, 1, make_cellref (1 - col, 0)); dao_set_array_expr (dao, col, 2, 1, 3, gnm_expr_new_funcall1 (fd, gnm_expr_new_constant (val_org))); dao_set_cell_expr (dao, col, 5, gnm_expr_new_funcall3 (fd_if, gnm_expr_new_binary (make_cellref (0, -4), GNM_EXPR_OP_GTE, make_cellref (0, -3)), gnm_expr_new_constant (value_new_string (_("Not normal"))), gnm_expr_new_constant (value_new_string (_("Possibly normal"))))); } if (info->graph) { so = sheet_object_graph_new (graph); g_object_unref (graph); dao_set_sheet_object (dao, 0, 1, so); } gnm_func_unref (fd); gnm_func_unref (fd_if); dao_redraw_respan (dao); return 0; }
static gboolean analysis_tool_one_mean_test_engine_run (data_analysis_output_t *dao, analysis_tools_data_one_mean_test_t *info) { guint col; GSList *data = info->base.input; gboolean first = TRUE; GnmFunc *fd_mean; GnmFunc *fd_var; GnmFunc *fd_sqrt; GnmFunc *fd_abs; GnmFunc *fd_tdist; GnmFunc *fd_iferror; GnmFunc *fd_count; fd_count = gnm_func_lookup_or_add_placeholder ("COUNT"); gnm_func_inc_usage (fd_count); fd_mean = gnm_func_lookup_or_add_placeholder ("AVERAGE"); gnm_func_inc_usage (fd_mean); fd_var = gnm_func_lookup_or_add_placeholder ("VAR"); gnm_func_inc_usage (fd_var); fd_sqrt = gnm_func_lookup_or_add_placeholder ("SQRT"); gnm_func_inc_usage (fd_sqrt); fd_abs = gnm_func_lookup_or_add_placeholder ("ABS"); gnm_func_inc_usage (fd_abs); fd_tdist = gnm_func_lookup_or_add_placeholder ("TDIST"); gnm_func_inc_usage (fd_tdist); fd_iferror = gnm_func_lookup_or_add_placeholder ("IFERROR"); gnm_func_inc_usage (fd_iferror); dao_set_italic (dao, 0, 0, 0, 9); set_cell_text_col (dao, 0, 0, _("/Student-t Test" "/N" "/Observed Mean" "/Hypothesized Mean" "/Observed Variance" "/Test Statistic" "/df" "/\xce\xb1" "/P(T\xe2\x89\xa4t) one-tailed" "/P(T\xe2\x89\xa4t) two-tailed")); for (col = 1; data != NULL; data = data->next, col++) { GnmValue *val_org = value_dup (data->data); GnmExpr const *expr; GnmExpr const *expr_org; GnmExpr const *expr_range_clean; GnmExpr const *expr_stddev; GnmExpr const *expr_abs; /* Note that analysis_tools_write_label may modify val_org */ dao_set_italic (dao, col, 0, col, 0); analysis_tools_write_label (val_org, dao, &info->base, col, 0, col); expr_org = gnm_expr_new_constant (val_org); expr_range_clean = gnm_expr_new_funcall2 (fd_iferror, gnm_expr_copy (expr_org), gnm_expr_new_constant (value_new_string(""))); if (first) { dao_set_cell_float (dao, col, 3, info->mean); dao_set_cell_float (dao, col, 7, info->alpha); first = FALSE; } else { dao_set_cell_expr (dao, col, 3, make_cellref (-1,0)); dao_set_cell_expr (dao, col, 7, make_cellref (-1,0)); } expr = gnm_expr_new_funcall1 (fd_count, expr_org); dao_set_cell_expr (dao, col, 1, expr); expr = gnm_expr_new_funcall1 (fd_mean, gnm_expr_copy (expr_range_clean)); dao_set_cell_array_expr (dao, col, 2, expr); expr = gnm_expr_new_funcall1 (fd_var, expr_range_clean); dao_set_cell_array_expr (dao, col, 4, expr); dao_set_cell_expr (dao, col, 6, gnm_expr_new_binary (make_cellref (0,-5), GNM_EXPR_OP_SUB, gnm_expr_new_constant (value_new_int (1)))); expr_stddev = gnm_expr_new_funcall1 (fd_sqrt, gnm_expr_new_binary (make_cellref (0,-1), GNM_EXPR_OP_DIV, make_cellref (0,-4))); expr = gnm_expr_new_binary (gnm_expr_new_binary (make_cellref (0,-3), GNM_EXPR_OP_SUB, make_cellref (0,-2)), GNM_EXPR_OP_DIV, expr_stddev); dao_set_cell_array_expr (dao, col, 5, expr); expr_abs = gnm_expr_new_funcall1 (fd_abs, make_cellref (0,-3)); expr = gnm_expr_new_funcall3 (fd_tdist, expr_abs, make_cellref (0,-2), gnm_expr_new_constant (value_new_int (1))); dao_set_cell_expr (dao, col, 8, expr); expr_abs = gnm_expr_new_funcall1 (fd_abs, make_cellref (0,-4)); expr = gnm_expr_new_funcall3 (fd_tdist, expr_abs, make_cellref (0,-3), gnm_expr_new_constant (value_new_int (2))); dao_set_cell_expr (dao, col, 9, expr); } gnm_func_dec_usage (fd_count); gnm_func_dec_usage (fd_mean); gnm_func_dec_usage (fd_var); gnm_func_dec_usage (fd_abs); gnm_func_dec_usage (fd_sqrt); gnm_func_dec_usage (fd_tdist); gnm_func_dec_usage (fd_iferror); dao_redraw_respan (dao); return FALSE; }
static gboolean analysis_tool_signed_rank_test_engine_run (data_analysis_output_t *dao, analysis_tools_data_sign_test_t *info) { guint col; GSList *data = info->base.input; gboolean first = TRUE; GnmExpr const *expr; GnmExpr const *expr_isnumber; GnmExpr const *expr_diff; GnmExpr const *expr_expect; GnmExpr const *expr_var; GnmExpr const *expr_abs; GnmExpr const *expr_big; GnmFunc *fd_median = analysis_tool_get_function ("MEDIAN", dao); GnmFunc *fd_if = analysis_tool_get_function ("IF", dao); GnmFunc *fd_sum = analysis_tool_get_function ("SUM", dao); GnmFunc *fd_min = analysis_tool_get_function ("MIN", dao); GnmFunc *fd_normdist = analysis_tool_get_function ("NORMDIST", dao); GnmFunc *fd_isnumber = analysis_tool_get_function ("ISNUMBER", dao); GnmFunc *fd_iferror = analysis_tool_get_function ("IFERROR", dao); GnmFunc *fd_rank = analysis_tool_get_function ("RANK.AVG", dao); GnmFunc *fd_abs = analysis_tool_get_function ("ABS", dao); GnmFunc *fd_sqrt = analysis_tool_get_function ("SQRT", dao); GnmFunc *fd_max = analysis_tool_get_function ("MAX", dao); dao_set_italic (dao, 0, 0, 0, 9); set_cell_text_col (dao, 0, 0, _("/Wilcoxon Signed Rank Test" "/Median" "/Predicted Median" "/N" "/S\xe2\x88\x92" "/S+" "/Test Statistic" "/\xce\xb1" "/P(T\xe2\x89\xa4t) one-tailed" "/P(T\xe2\x89\xa4t) two-tailed")); for (col = 0; data != NULL; data = data->next, col++) { GnmValue *val_org = value_dup (data->data); GnmExpr const *expr_org; /* Note that analysis_tools_write_label may modify val_org */ dao_set_italic (dao, col + 1, 0, col+1, 0); analysis_tools_write_label (val_org, dao, &info->base, col + 1, 0, col + 1); expr_org = gnm_expr_new_constant (val_org); if (first) { dao_set_cell_float (dao, col + 1, 2, info->median); dao_set_cell_float (dao, col + 1, 7, info->alpha); first = FALSE; } else { dao_set_cell_expr (dao, col + 1, 2, make_cellref (-1,0)); dao_set_cell_expr (dao, col + 1, 7, make_cellref (-1,0)); } expr_isnumber = gnm_expr_new_funcall3 (fd_if, gnm_expr_new_funcall1 (fd_isnumber, gnm_expr_copy (expr_org)), make_int (1), make_int (0)); expr = gnm_expr_new_funcall1 (fd_median, gnm_expr_copy (expr_org)); dao_set_cell_expr (dao, col + 1, 1, expr); expr_diff = gnm_expr_new_binary (gnm_expr_copy (expr_org), GNM_EXPR_OP_SUB, make_cellref (0,-2)); expr_abs = gnm_expr_new_funcall1 (fd_abs, gnm_expr_copy (expr_diff)); expr_big = gnm_expr_new_binary (gnm_expr_new_funcall1 (fd_max, gnm_expr_copy (expr_abs)), GNM_EXPR_OP_ADD, make_int (1)); expr = gnm_expr_new_funcall3 (fd_if, gnm_expr_new_funcall1 (fd_isnumber, gnm_expr_copy (expr_org)), gnm_expr_new_funcall3 (fd_if, gnm_expr_new_binary (gnm_expr_copy (expr_org), GNM_EXPR_OP_EQUAL, make_cellref (0,-2)), gnm_expr_copy (expr_big), expr_abs), expr_big); expr = gnm_expr_new_funcall3 (fd_rank, gnm_expr_new_unary (GNM_EXPR_OP_UNARY_NEG, expr_diff), expr, make_int (1)); dao_set_cell_array_expr (dao, col + 1, 4, gnm_expr_new_funcall1 (fd_sum, gnm_expr_new_binary (gnm_expr_copy (expr_isnumber), GNM_EXPR_OP_MULT, gnm_expr_new_funcall3 (fd_if, gnm_expr_new_binary (gnm_expr_copy (expr_org), GNM_EXPR_OP_LT, make_cellref (0,-2)), expr, make_int (0))))); expr = gnm_expr_new_funcall1 (fd_sum, gnm_expr_new_binary (expr_isnumber, GNM_EXPR_OP_MULT, gnm_expr_new_funcall2 (fd_iferror, gnm_expr_new_funcall3 (fd_if, gnm_expr_new_binary (expr_org, GNM_EXPR_OP_NOT_EQUAL, make_cellref (0,-1)), make_int (1), make_int (0)), make_int (0)))); dao_set_cell_array_expr (dao, col + 1, 3, expr); dao_set_cell_expr (dao, col + 1, 5, gnm_expr_new_binary (gnm_expr_new_binary (gnm_expr_new_binary (make_cellref (0,-2), GNM_EXPR_OP_MULT, gnm_expr_new_binary (make_cellref (0,-2), GNM_EXPR_OP_ADD, make_int (1))), GNM_EXPR_OP_DIV, make_int (2)), GNM_EXPR_OP_SUB, make_cellref (0,-1))); dao_set_cell_expr (dao, col + 1, 6, gnm_expr_new_funcall2 (fd_min, make_cellref (0,-1), make_cellref (0,-2))); expr_expect = gnm_expr_new_binary (gnm_expr_new_binary (make_cellref (0,-5), GNM_EXPR_OP_MULT, gnm_expr_new_binary (make_cellref (0,-5), GNM_EXPR_OP_ADD, make_int (1))), GNM_EXPR_OP_DIV, make_int (4)); expr_var = gnm_expr_new_binary (gnm_expr_new_binary (gnm_expr_copy (expr_expect), GNM_EXPR_OP_MULT, gnm_expr_new_binary (gnm_expr_new_binary (make_int (2), GNM_EXPR_OP_MULT, make_cellref (0,-5)), GNM_EXPR_OP_ADD, make_int (1))), GNM_EXPR_OP_DIV, make_int (6)); expr = gnm_expr_new_funcall4 (fd_normdist, gnm_expr_new_binary (make_cellref (0,-2), GNM_EXPR_OP_ADD, make_float (0.5)), expr_expect, gnm_expr_new_funcall1 (fd_sqrt, expr_var), gnm_expr_new_constant (value_new_bool (TRUE))); dao_set_cell_expr (dao, col + 1, 8, gnm_expr_new_funcall3 (fd_if, gnm_expr_new_binary (make_cellref (0,-5), GNM_EXPR_OP_LT, make_int (12)), gnm_expr_new_constant (value_new_error_NA (NULL)), expr)); dao_set_cell_comment (dao, col + 1, 8, _("This p-value is calculated by a normal approximation.\n" "It is only valid if the sample size is at least 12.")); expr = gnm_expr_new_binary (make_int (2), GNM_EXPR_OP_MULT, make_cellref (0,-1)); dao_set_cell_expr (dao, col + 1, 9, expr); } gnm_func_unref (fd_median); gnm_func_unref (fd_if); gnm_func_unref (fd_min); gnm_func_unref (fd_sum); gnm_func_unref (fd_normdist); gnm_func_unref (fd_isnumber); gnm_func_unref (fd_iferror); gnm_func_unref (fd_rank); gnm_func_unref (fd_abs); gnm_func_unref (fd_sqrt); gnm_func_unref (fd_max); dao_redraw_respan (dao); return FALSE; }
static gboolean analysis_tool_signed_rank_test_two_engine_run (data_analysis_output_t *dao, analysis_tools_data_sign_test_two_t *info) { GnmValue *val_1; GnmValue *val_2; GnmExpr const *expr_1; GnmExpr const *expr_2; GnmExpr const *expr; GnmExpr const *expr_diff; GnmExpr const *expr_diff_pred; GnmExpr const *expr_isnumber_1; GnmExpr const *expr_isnumber_2; GnmExpr const *expr_isnumber; GnmExpr const *expr_expect; GnmExpr const *expr_var; GnmExpr const *expr_abs; GnmExpr const *expr_big; GnmFunc *fd_median = analysis_tool_get_function ("MEDIAN", dao); GnmFunc *fd_if = analysis_tool_get_function ("IF", dao); GnmFunc *fd_sum = analysis_tool_get_function ("SUM", dao); GnmFunc *fd_min = analysis_tool_get_function ("MIN", dao); GnmFunc *fd_normdist = analysis_tool_get_function ("NORMDIST", dao); GnmFunc *fd_isnumber = analysis_tool_get_function ("ISNUMBER", dao); GnmFunc *fd_iferror = analysis_tool_get_function ("IFERROR", dao); GnmFunc *fd_rank = analysis_tool_get_function ("RANK.AVG", dao); GnmFunc *fd_abs = analysis_tool_get_function ("ABS", dao); GnmFunc *fd_sqrt = analysis_tool_get_function ("SQRT", dao); GnmFunc *fd_max = analysis_tool_get_function ("MAX", dao); dao_set_italic (dao, 0, 0, 0, 10); set_cell_text_col (dao, 0, 0, _("/Wilcoxon Signed Rank Test" "/Median" "/Observed Median Difference" "/Predicted Median Difference" "/N" "/S\xe2\x88\x92" "/S+" "/Test Statistic" "/\xce\xb1" "/P(T\xe2\x89\xa4t) one-tailed" "/P(T\xe2\x89\xa4t) two-tailed")); val_1 = value_dup (info->base.range_1); val_2 = value_dup (info->base.range_2); /* Labels */ dao_set_italic (dao, 1, 0, 2, 0); analysis_tools_write_label_ftest (val_1, dao, 1, 0, info->base.labels, 1); analysis_tools_write_label_ftest (val_2, dao, 2, 0, info->base.labels, 2); expr_1 = gnm_expr_new_constant (value_dup (val_1)); expr_2 = gnm_expr_new_constant (value_dup (val_2)); dao_set_cell_float (dao, 1, 3, info->median); dao_set_cell_float (dao, 1, 8, info->base.alpha); expr_isnumber_1 = gnm_expr_new_funcall3 (fd_if, gnm_expr_new_funcall1 (fd_isnumber, gnm_expr_copy (expr_1)), make_int (1), make_int (0)); expr_isnumber_2 = gnm_expr_new_funcall3 (fd_if, gnm_expr_new_funcall1 (fd_isnumber, gnm_expr_copy (expr_2)), make_int (1), make_int (0)); expr_isnumber = gnm_expr_new_binary (expr_isnumber_1, GNM_EXPR_OP_MULT, expr_isnumber_2); expr = gnm_expr_new_funcall1 (fd_median, gnm_expr_new_funcall3 (fd_if, gnm_expr_new_binary (gnm_expr_copy (expr_isnumber), GNM_EXPR_OP_EQUAL, make_int (1)), gnm_expr_copy (expr_1), gnm_expr_new_constant (value_new_string("")))); dao_set_cell_array_expr (dao, 1, 1, expr); expr = gnm_expr_new_funcall1 (fd_median, gnm_expr_new_funcall3 (fd_if, gnm_expr_new_binary (gnm_expr_copy (expr_isnumber), GNM_EXPR_OP_EQUAL, make_int (1)), gnm_expr_copy (expr_2), gnm_expr_new_constant (value_new_string("")))); dao_set_cell_array_expr (dao, 2, 1, expr); expr_diff = gnm_expr_new_binary (gnm_expr_copy (expr_1), GNM_EXPR_OP_SUB, gnm_expr_copy (expr_2)); dao_set_cell_array_expr (dao, 1, 2, gnm_expr_new_funcall1 (fd_median, gnm_expr_new_funcall3 (fd_if, gnm_expr_new_binary (gnm_expr_copy (expr_isnumber), GNM_EXPR_OP_EQUAL, make_int (1)), gnm_expr_copy (expr_diff), gnm_expr_new_constant (value_new_string(""))))); expr = gnm_expr_new_funcall1 (fd_sum, gnm_expr_new_binary (gnm_expr_copy (expr_isnumber), GNM_EXPR_OP_MULT, gnm_expr_new_funcall2 (fd_iferror, gnm_expr_new_funcall3 (fd_if, gnm_expr_new_binary (gnm_expr_copy (expr_diff), GNM_EXPR_OP_NOT_EQUAL, make_cellref (0,-2)), make_int (1), make_int (0)), make_int (0)))); dao_set_cell_array_expr (dao, 1, 4, expr); expr_diff_pred = gnm_expr_new_binary (gnm_expr_copy (expr_diff), GNM_EXPR_OP_SUB, make_cellref (0,-2)); expr_abs = gnm_expr_new_funcall1 (fd_abs, gnm_expr_copy (expr_diff_pred)); expr_big = gnm_expr_new_binary (gnm_expr_new_funcall1 (fd_max, gnm_expr_copy (expr_abs)), GNM_EXPR_OP_ADD, make_int (1)); expr = gnm_expr_new_funcall3 (fd_if, gnm_expr_new_funcall1 (fd_isnumber, expr_1), gnm_expr_new_funcall3 (fd_if, gnm_expr_new_funcall1 (fd_isnumber, expr_2), gnm_expr_new_funcall3 (fd_if, gnm_expr_new_binary (gnm_expr_copy (expr_diff), GNM_EXPR_OP_EQUAL, make_cellref (0,-2)), gnm_expr_copy (expr_big), expr_abs), gnm_expr_copy (expr_big)), expr_big); expr = gnm_expr_new_funcall3 (fd_rank, gnm_expr_new_unary (GNM_EXPR_OP_UNARY_NEG, expr_diff_pred), expr, make_int (1)); expr = gnm_expr_new_funcall1 (fd_sum, gnm_expr_new_binary (expr_isnumber, GNM_EXPR_OP_MULT, gnm_expr_new_funcall3 (fd_if, gnm_expr_new_binary (expr_diff, GNM_EXPR_OP_LT, make_cellref (0,-2)), expr, make_int (0)))); dao_set_cell_array_expr (dao, 1, 5, expr); dao_set_cell_expr (dao, 1, 6, gnm_expr_new_binary (gnm_expr_new_binary (gnm_expr_new_binary (make_cellref (0,-2), GNM_EXPR_OP_MULT, gnm_expr_new_binary (make_cellref (0,-2), GNM_EXPR_OP_ADD, make_int (1))), GNM_EXPR_OP_DIV, make_int (2)), GNM_EXPR_OP_SUB, make_cellref (0,-1))); dao_set_cell_expr (dao, 1, 7, gnm_expr_new_funcall2 (fd_min, make_cellref (0,-1), make_cellref (0,-2))); expr_expect = gnm_expr_new_binary (gnm_expr_new_binary (make_cellref (0,-5), GNM_EXPR_OP_MULT, gnm_expr_new_binary (make_cellref (0,-5), GNM_EXPR_OP_ADD, make_int (1))), GNM_EXPR_OP_DIV, make_int (4)); expr_var = gnm_expr_new_binary (gnm_expr_new_binary (gnm_expr_copy (expr_expect), GNM_EXPR_OP_MULT, gnm_expr_new_binary (gnm_expr_new_binary (make_int (2), GNM_EXPR_OP_MULT, make_cellref (0,-5)), GNM_EXPR_OP_ADD, make_int (1))), GNM_EXPR_OP_DIV, make_int (6)); expr = gnm_expr_new_funcall4 (fd_normdist, gnm_expr_new_binary (make_cellref (0,-2), GNM_EXPR_OP_ADD, make_float (0.5)), expr_expect, gnm_expr_new_funcall1 (fd_sqrt, expr_var), gnm_expr_new_constant (value_new_bool (TRUE))); dao_set_cell_expr (dao, 1, 9, gnm_expr_new_funcall3 (fd_if, gnm_expr_new_binary (make_cellref (0,-5), GNM_EXPR_OP_LT, make_int (12)), gnm_expr_new_constant (value_new_error_NA (NULL)), expr)); dao_set_cell_comment (dao, 1, 9, _("This p-value is calculated by a normal approximation.\n" "It is only valid if the sample size is at least 12.")); expr = gnm_expr_new_binary (make_int (2), GNM_EXPR_OP_MULT, make_cellref (0,-1)); dao_set_cell_array_expr (dao, 1, 10, expr); gnm_func_unref (fd_median); gnm_func_unref (fd_if); gnm_func_unref (fd_min); gnm_func_unref (fd_sum); gnm_func_unref (fd_normdist); gnm_func_unref (fd_isnumber); gnm_func_unref (fd_iferror); gnm_func_unref (fd_rank); gnm_func_unref (fd_abs); gnm_func_unref (fd_sqrt); gnm_func_unref (fd_max); value_release (val_1); value_release (val_2); dao_redraw_respan (dao); return FALSE; }