[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

RE: st: dirifit

From   "Nick Cox" <[email protected]>
To   <[email protected]>
Subject   RE: st: dirifit
Date   Wed, 5 Mar 2008 21:07:54 -0000

Let me try to handle this so that Maarten can write another paragraph of

his Ph.D. (He should just submit his contributions to Statalist as

I am the second author of -dirifit-, or at least that's what it tells me
in the help. 

Last question first: The short answer is No, not in general. 
This is a much asked question on this list. -findit precision- 
in Stata points to documentation, but the essence is this: 
A decimal number can be held exactly in Stata if and only if 
it corresponds to a binary number that can be held exactly. 
Thus 0.5 qualifies, for example, but most decimals don't. 

First question last. -dirifit- tries, among other things, to ignore
observations in 
which any response is 0 or 1. No precision issues arise with holding
zeros and ones. 
Computers are designed for precisely (nice word here) that purpose. That
leaves the question
of totals which Viktor very reasonably raises. 

Let's look at the code.  

Segment 1: 

	foreach var of varlist `varlist' {
		local test "`test' | `var' <= 0 | `var' >= 1"

Comment 1: The inequalities also include <0 and >1, but neither
extension should be problematic. 

Segment 2: 

	tempname tot
	qui gen double `tot' = 0 if `touse'
	qui foreach v of local varlist {
		replace `tot' = `tot' + cond(missing(`v'),0,`v') if
	qui count if (`tot' < .99 | `tot' > 1.01 `test') & `touse'

	if r(N) {
		noi di " "
		noi di as txt ///
		"{p}warning: {res:`varlist'} has `r(N)' values <= 0 or
>= 1" 
		noi di as txt ///
		" or rowtotal(`varlist') != 1; not used in
	qui replace `touse' = 0 if `tot' < .99 | `tot' > 1.01 `test' 

	qui count if `touse' 
	if r(N) == 0 error 2000

Comment 2: There is in fact a tolerance built in here to match any
about precision. If your totals are under .99 or above 1.01, they will
trapped _and_ you will be told about it. 

If the results remain puzzling, I suggesting emailing the dataset to
Maarten or myself. 

[email protected] 

[email protected]

I want to explain the share of time that individuals spent on five
alternatives (y1 - y5). Hence y1+y2+y3+y4+y5=1.
Therefore I run:
dirifit y1-y5, mu(x1 x2)
It works, however, for only 60 cases out of more than 500. That is, the
estimation is done for 60 cases.
Could it be that the -float- character of the dependent variable causes
problem? I am just wondering whether the possibility exists that the sum
of y
(=y1+y2+y3+y4+y5) becomes slightly lower or slightly larger than one
when the
dependent is -float-.
-dirifit- can be estimated only if the sum is one.
Is there a possibility to transform the variables in the way that 0.2534
exactly 0.2534 and not 0.253(3)9 or 0.2534(0)1?

*   For searches and help try:

© Copyright 1996–2024 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index