Skip to content

Commit cf7c0f7

Browse files
do loops on singletons (#256)
* do loops on singletons * Update fixedeffects.jl * Update fit.jl * Update fit.jl * Update fit.jl * Update Project.toml * Update fit.jl * Update fit.jl
1 parent 74b32f6 commit cf7c0f7

File tree

3 files changed

+14
-9
lines changed

3 files changed

+14
-9
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "FixedEffectModels"
22
uuid = "9d5cd8c9-2029-5cab-9928-427838db53e3"
3-
version = "1.10.1"
3+
version = "1.10.2"
44

55
[deps]
66
DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"

src/fit.jl

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -154,11 +154,13 @@ function StatsAPI.fit(::Type{FixedEffectModel},
154154
esample .&= Vcov.completecases(df, vcov)
155155
fes, ids, fekeys, formula = parse_fixedeffect(df, formula)
156156
has_fes = !isempty(fes)
157-
if has_fes
158-
if drop_singletons
159-
for fe in fes
160-
drop_singletons!(esample, fe)
161-
end
157+
#TODO: add tests + return n_singletons
158+
n_singletons = 0
159+
while has_fes && drop_singletons
160+
ns = Tuple(drop_singletons!(esample, fe) for fe in fes)
161+
n_singletons += sum(ns)
162+
if sum(ns) == first(ns)
163+
break
162164
end
163165
end
164166
save_fe = (save == :fe) | ((save == :all) & has_fes)

src/utils/fixedeffects.jl

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,20 @@
55
##############################################################################
66

77
function drop_singletons!(esample, fe::FixedEffect)
8+
n = 0
89
cache = zeros(Int, fe.n)
910
@inbounds for i in eachindex(esample)
1011
if esample[i]
1112
cache[fe.refs[i]] += 1
1213
end
1314
end
1415
@inbounds for i in eachindex(esample)
15-
if esample[i]
16-
esample[i] = cache[fe.refs[i]] > 1
16+
if esample[i] && (cache[fe.refs[i]] == 1)
17+
esample[i] = false
18+
n += 1
1719
end
1820
end
21+
return n
1922
end
2023

2124
##############################################################################
@@ -51,4 +54,4 @@ function isnested(fe::FixedEffect, prefs)
5154
end
5255
end
5356
return true
54-
end
57+
end

0 commit comments

Comments
 (0)