John Darrington [Fri, 23 Nov 2012 08:01:36 +0000 (09:01 +0100)]
Logistic Regression: Ignore cases with missing dependent variables.
Prior to this change, cases with missing values in the predictor
variables were ignored, but cases with missing values only in the
dependent variable would provoke an error. Subsequent to this change
such cases are also ignored. This seems to be the behaviour of other
software, despite what their documentation may suggest.
John Darrington [Wed, 21 Nov 2012 21:13:27 +0000 (22:13 +0100)]
Logistic Regression: Calculate the logs of the likelihood instead of the raw value.
The likelihood values can become extremely large which can result in
lost precision in a double. This change therefore calculates the
logarithms of the likelihoods instead of their actual value.
John Darrington [Tue, 20 Nov 2012 11:32:34 +0000 (12:32 +0100)]
Fix (again) problems displaying a GtkSourceView widget on Cygwin
Under certain compiler options, the effect of the gtk_*get_type
function call was optimised away. This change fixes that. It
seems that both static and volatile are necessary, in order to
avoid the compiler from complaining and/or optimising the call
away.
John Darrington [Tue, 20 Nov 2012 09:32:14 +0000 (10:32 +0100)]
Logistic Regression: Optimise the classification calculations.
Instead of calculating the logit of the prediction for each case,
pre-calculate the inverse logit of the threshold before the process
starts. This should give a small performance gain..
John Darrington [Mon, 19 Nov 2012 10:15:49 +0000 (11:15 +0100)]
Fix possible memory corruption when creating dialogs with selectors.
The PsppireSelector widget's class structure contains a map of selectors
indexed by the source widget with which they are associated. Until now, that
map was never depopulated. This could have caused problems if newly created
widgets happened to use the same address as old, destroyed ones. This change
removes selectors from the map upon destruction.
John Darrington [Tue, 13 Nov 2012 18:00:38 +0000 (19:00 +0100)]
Remove _base_init and base_finalize functions from psppire-selector
Gtk+ documentation recommends these are avoided in modern code.
They differ only from class_init in the case where the class has subclasses,
which PsppireSelector does not.
John Darrington [Sun, 11 Nov 2012 13:19:05 +0000 (14:19 +0100)]
Logistic Regression: Added categorical variable support
With this commit Logistic Regression now supports the /CATEGORICALS
subcommand, allowing a dependent variable to be regressed against one
or more categorical predictor variables.
Ben Pfaff [Fri, 9 Nov 2012 06:51:08 +0000 (22:51 -0800)]
psppire-data-sheet: Set cursor on row in psppire_data_sheet_show_variable().
psppire_data_sheet_show_variable() only ensured that the variable in
question was visible in the data sheet. This commit makes it also put
the cursor on the variable's column. This affects the function's two
callers: the Find Dialog now selects a cell instead of an entire row,
and double-clicking a row number in the variable sheet now does likewise.
This solves a problem reported by John Darrington, who reported that
double-clicking on a row number in the variable sheet did not change
the selected cell but only switched to the data sheet.
Ben Pfaff [Fri, 9 Nov 2012 06:10:58 +0000 (22:10 -0800)]
psppire-button-editable: Fix infinite recursion in button-release-event.
"release" and "button-release-event" are different. Before commit 8f843c3a5e905c (Avoid deprecated function: gtk_button_released),
psppire_button_editable_button_release() invoked the former. That commit
changed it to invoke the latter, which is the same signal that the
function itself implements, hence causing infinite recursion. This commit
changes it to invoke the former.
Without this commit, the following instructions reliably crash for me:
1. Load a data file, click over to variables tab.
2. Click on a ... button in the Type column.
3. Click on Cancel button in Type dialog.
4. Click on the same ... button as before.
With this commit, those instructions don't crash (the Type dialog pops
back up after step 4, as it should).
John Darrington [Thu, 8 Nov 2012 13:33:51 +0000 (14:33 +0100)]
Categoricals.c: Ensure that categories are processed order of their categorical variable(s).
Some procedures require that categoricals are processed in a particular order.
Mathematically, the order is irrelevant, however for reporting purposes it is
sometimes required. This change adds a level of indirection, so that the codes
are allocated in ascending order of the categorical variable.
John Darrington [Tue, 6 Nov 2012 19:50:33 +0000 (20:50 +0100)]
Categoricals: Provide separate functions for effects and dummy coding.
Until now, the function categoricals_get_code_for_case returned the
"effects" coding (ie, a bipolar code). Some uses require "dummy" coding
(a binary coding). This change provides seperate functions to return
whatever is desired.
John Darrington [Fri, 2 Nov 2012 14:31:45 +0000 (15:31 +0100)]
Categoricals: Accept null pointer as subject.
Previously, certain functions would crash, or behave badly if their
argument was NULL. This change makes them do nothing, or return
default values, as appropriate. This saves callers having to always
test for NULL.
Ben Pfaff [Sun, 28 Oct 2012 20:22:33 +0000 (13:22 -0700)]
pspp-sheet-view: Fix warning using arrow keys to navigate column buttons.
Before this commit, clicking on a column head button in the data sheet,
then holding down the right arrow key until the data sheet began to scroll
right would often produce a warning of the form:
** (psppire:16451): WARNING **: Internal button not found
because nothing caused the underlying GtkButton to be instantiated in this
scenario. This commit fixes the problem.
Ben Pfaff [Sun, 28 Oct 2012 20:01:47 +0000 (13:01 -0700)]
pspp-sheet-view: Make Shift+Tab select only one cell when switching rows.
Before this commit, Shift+Tab at the start of a row in the data sheet would
select both the new cell and the cell below it. After this commit, only
the new cell is selected, as one would expect.
Ben Pfaff [Thu, 25 Oct 2012 06:24:25 +0000 (23:24 -0700)]
gui: Make Tab, Shift+Tab skip row head and new-var columns in data sheet.
Before this commit, Tab and Shift+Tab acted just like Left and Right in
the data sheet, that is, they visit every column except the row head
column and always stay on the same row. After this commit, Tab and
Shift+Tab skip the row head and new-variable columns. Also, Tab at the
end of a row goes to the beginning of the next row, and Shift+Tab at the
beginning of a row goes to the end of the previous row.
Ben Pfaff [Sun, 14 Oct 2012 18:35:06 +0000 (11:35 -0700)]
psppire-data-sheet: Use specific functions instead of g_object_set().
Using particular functions seems less error-prone, since it avoids the
possibility of misspelling a property name or getting their values' types
wrong.
So what was happening was this: When the var-name was double-clicked, the view switched
from VarView to DataView as soon as event 4 (GDK_2BUTTON_PRESS) occured. Then event 5
(GDK_BUTTON_RELEASE) occured.
Now the PsppSheetView object is written such that, it decides to edit a cell, on button
release event. Hence, whichever cell the pointer happended to be in, when the user lifts
his finger after double clicking, starts to be edited.
This change ignores button release events on the object unless a corresponding button press
event was seen.
Ben Pfaff [Mon, 8 Oct 2012 19:06:11 +0000 (12:06 -0700)]
psppire-data-editor: Keep value labels setting across Windows|Split.
Before this commit, Windows|Split always turned off displaying value
labels in data sheet cells. This commit causes this setting to be
preserved across Windows|Split.
Ben Pfaff [Fri, 5 Oct 2012 04:22:42 +0000 (21:22 -0700)]
configure.ac: Increase pango minimum version from 1.20 to 1.22
Commit bd4d6e7453 (cairo: Avoid deprecated
pango_cairo_font_map_create_context().) added a dependency on pango
version 1.22 or later, but configure.ac only checked for version 1.20
or later. This commit fixes the discrepancy.
INSTALL already documented that Pango 1.22 or later was needed.
Ben Pfaff [Sun, 30 Sep 2012 19:29:33 +0000 (12:29 -0700)]
tests: Better isolate search text in test of error reporting.
Some GNU/Linux distributions print additional text on a segfault,
e.g. "Cannot exec debugger: No such file or directory", which this
test was seeing in output and interpreting as a failed test. This
commit fixes the problem by ignoring text up to the ***** line that
marks the start of the expected output.
Ben Pfaff [Wed, 26 Sep 2012 04:18:32 +0000 (21:18 -0700)]
Suppress GCC 4.7 warnings by changes to code that make it less clear.
I'm not entirely happy with these changes, because they make the code
slightly less obvious. However, it's still not really bad code, and
it's convenient to have a warning-free build.
Ben Pfaff [Wed, 26 Sep 2012 00:09:47 +0000 (17:09 -0700)]
gnumeric-reader: Add cast to suppress warning.
This suppresses a GCC warning for a mismatch between
xmlInputCloseCallback, which takes a "void *" parameter, and
gzclose(), which takes a "gzFile" (which is "struct gzFile_s *").
This came up with an upgrade from "squeeze" to "wheezy". I assume
that a gzclose prototype became visible or that gzFile changed away
from "void *".
An alternative would be to write a trampoline to just transform one
pointer type to the other, but the xmlReaderForIO() invocation
already has one function cast so a second cast doesn't make it much
worse.
Pango 1.30 that is in Debian "wheezy" has marked this function as
deprecated. The replacement pango_font_map_create_context() was
introduced in Pango 1.22, which was also in Debian "squeeze" (which
had Pango 1.28), so it seems safe to switch without worrying about
a Pango version check.
Ben Pfaff [Tue, 25 Sep 2012 22:36:50 +0000 (15:36 -0700)]
Remove variables assigned to but never used.
Each of the variables removed here was assigned a value that was
never used, the assignment didn't have any useful side effects, and
I don't see anything that the variable should have been used for.
Ben Pfaff [Tue, 25 Sep 2012 22:14:50 +0000 (15:14 -0700)]
expressions: Fix coercion of numbers to booleans at top level.
The check for the expected type in type_check() used the wrong
constant (a node type instead of an expression type) and so the
"if" test was never true. Also, OP_NUM_TO_BOOLEAN is binary, not
unary, so fixing just the test caused an assertion failure.
John Darrington [Thu, 20 Sep 2012 09:22:12 +0000 (11:22 +0200)]
src/data/data-out.c: Added assertion to catch negative values
If the contents of string does not contain a '.', then integer_digits
will end up negative, thus causing a crash later. This change adds
an assertion to catch this condition and thus make the diagnosis easier
should it ever occur.
John Darrington [Wed, 12 Sep 2012 07:26:21 +0000 (09:26 +0200)]
Perl Module: Avoid forcing scalar value into a pointer.
The code fragment: struct dictionary *dict = (void *) SvIV (dict_sv);
is dangerous. This fix uses the properl Perl XS mechanism to get
the pointer and the scalar associated with the dictionary.
Ben Pfaff [Mon, 3 Sep 2012 05:21:09 +0000 (22:21 -0700)]
psppire-cell-renderer: Fix behavior of repeated clicks on a button.
I'm not sure why I thought this code was necessary. Removing it
fixes the problem, which John Darrington reported as:
1. Create or load a dataset with one or more variables.
2. Switch to the variable sheet.
3. Click on one of the in-cell buttons (for example) Value Labels.
4. After the dialog box appears, cancel it with the cancel button.
5. The dialog closes, and the button which invoked it, now has the
focus. However clicking on that button again refuses to bring the
dialog back. One has to move off the button and onto the cell
background.
Ben Pfaff [Sun, 2 Sep 2012 18:07:59 +0000 (11:07 -0700)]
psppire-var-sheet: Allow adjusting width of string variables.
John Darrington pointed out that the "width" column in the variable
sheet didn't allow the width to be modified with a spin button for
string variables, as it did for numeric variables. This commit
fixes the problem.
The reordering in on_var_column_edited() is necessary because the
print format of a string variable can't be changed to a different
width before changing the variable's width. (The change from
var_set_print_format() to var_set_both_formats() is not
necessary. It is for consistency with changing variable type and
format via the var-type-dialog.)
Ben Pfaff [Mon, 20 Aug 2012 07:00:33 +0000 (00:00 -0700)]
sys-file-reader: Fix setjmp() technicality.
The C standards say that the compiler is allowed to optimize away
changes to local variables within a function between a call to
setjmp() and a later call to longjmp(), unless the local variables
are volatile-qualified.
The 'info' local variable in sfm_open_reader() fits this
description but wasn't volatile-qualified. This commit fixes that,
even though my compiler didn't in fact seem to have a problem with
the previous version.
Ben Pfaff [Mon, 20 Aug 2012 06:59:47 +0000 (23:59 -0700)]
sys-file-reader: Fix memory leak.
The C standards say that the compiler is allowed to optimize away
changes to local variables within a function between a call to
setjmp() and a later call to longjmp(), unless the local variables
are volatile-qualified.
The 'dict' local variable in sfm_open_reader() fits this
description but wasn't volatile-qualified. GCC in fact optimized
out the changes on my system, and this commit fixes that.