Skip to content

Instantly share code, notes, and snippets.

@guilhermesilveira
Created September 15, 2010 11:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save guilhermesilveira/580629 to your computer and use it in GitHub Desktop.
Save guilhermesilveira/580629 to your computer and use it in GitHub Desktop.
class Amostra
attr_reader :pop, :obi, :tempo
def initialize(pop,obi,tempo)
@pop = pop
@obi = obi
@tempo = tempo
end
def lamb
return 0 if (@pop*@tempo)==0
(0.0+@obi) / (@pop*@tempo)
end
def +(a)
Amostra.new(pop+a.pop,obi+a.obi,tempo)
end
def R
1 - Math::E ** (-lamb*tempo)
end
def RR
self.R / (1-self.R)
end
def print
puts "amostra lamb=#{lamb} R=#{self.R}"
end
def R_parcial(anos)
1 - Math::E ** (-lamb*anos)
end
end
class Pessoa
attr_reader :tempo, :obito
def initialize(id, idade, sexo, inicio, opera, quando, final, tempo, obito)
@id= id
@idade = idade
@sexo = sexo
@inicio = inicio
@opera = opera
@quando = quando
@final = final
@tempo = tempo
@obito = obito
end
def aconselha?
@opera==1
end
def faixa_etaria
@idade<60 ? :novo : :velho
end
end
pss = []
pss << Pessoa.new(25,57,1,"26/07/48",1,"21/02/50","03/12/50",860,1)
pss << Pessoa.new(54,65,1,"09/08/50",1,".","31/01/52",540,1)
pss << Pessoa.new(50,41,1,"09/06/50",0,".","05/10/50",118,1)
pss << Pessoa.new(43,54,1,"10/12/49",0,".","17/08/50",250,1)
pss << Pessoa.new(2,31,1,"17/03/47",1,"18/04/47","29/09/47",196,1)
pss << Pessoa.new(77,51,1,"14/11/51",1,"27/12/51","30/12/51",46,1)
pss << Pessoa.new(32,44,0,"03/03/49",1,"12/05/49","08/03/50",370,1)
pss << Pessoa.new(58,55,1,"11/09/50",0,".","22/12/50",102,1)
pss << Pessoa.new(11,58,1,"23/07/47",1,"02/10/47","27/12/48",523,1)
pss << Pessoa.new(56,57,0,"18/08/50",0,".","05/05/51",260,1)
pss << Pessoa.new(59,59,1,"31/10/50",1,"30/03/51","07/11/51",372,1)
pss << Pessoa.new(76,52,1,"18/10/51",0,".","28/10/52",376,1)
pss << Pessoa.new(100,58,1,"05/05/53",1,"23/07/53","20/07/54",441,0)
pss << Pessoa.new(24,50,1,"07/06/48",0,".","30/11/48",176,1)
pss << Pessoa.new(23,53,1,"26/05/48",1,"20/02/51","14/04/51",1053,1)
pss << Pessoa.new(46,52,1,"20/02/50",1,"16/04/51","22/07/54",1613,0)
pss << Pessoa.new(20,59,1,"29/04/48",1,"15/09/43","17/11/53",2028,0)
pss << Pessoa.new(88,40,1,"20/08/52",0,".","12/02/53",176,1)
pss << Pessoa.new(98,43,1,"06/02/53",1,"26/03/53","21/05/53",104,1)
pss << Pessoa.new(22,53,1,"21/05/48",1,"19/08/48","04/01/49",228,1)
pss << Pessoa.new(70,50,1,"24/05/51",0,".","14/03/52",295,1)
pss << Pessoa.new(52,55,1,"23/06/50",1,"16/04/51","05/11/51",500,1)
pss << Pessoa.new(57,52,1,"30/08/50",1,"19/06/51","29/06/51",303,1)
pss << Pessoa.new(6,58,1,"03/05/47",1,"17/08/50","13/02/51",1382,1)
pss << Pessoa.new(26,54,1,"27/10/48",1,"24/06/49","16/07/49",262,1)
pss << Pessoa.new(37,53,0,"27/07/49",0,".","12/07/52",1081,1)
pss << Pessoa.new(83,56,1,"04/03/52",1,"22/05/53","07/07/54",855,0)
pss << Pessoa.new(89,51,1,"20/08/52",1,"15/10/52","01/03/53",193,1)
pss << Pessoa.new(82,38,1,"21/02/52",0,".","03/02/53",348,1)
pss << Pessoa.new(21,59,1,"20/05/48",0,".","10/07/49",416,1)
pss << Pessoa.new(62,56,1,"15/01/51",0,".","11/03/52",421,1)
pss << Pessoa.new(80,49,1,"05/01/52",1,"28/02/52","05/03/52",60,1)
pss << Pessoa.new(12,57,1,"04/09/47",0,".","09/08/48",340,1)
pss << Pessoa.new(86,47,1,"03/07/52",1,"21/08/52","05/01/54",551,0)
pss << Pessoa.new(36,52,1,"15/06/49",0,".","14/01/50",213,1)
pss << Pessoa.new(74,44,1,"24/09/51",0,".","25/04/52",214,1)
pss << Pessoa.new(67,49,1,"04/05/51",1,"02/07/51","07/07/54",1160,0)
pss << Pessoa.new(45,54,1,"21/01/50",0,".","13/09/50",235,1)
pss << Pessoa.new(30,44,0,"10/02/49",1,"19/11/51","23/11/51",1016,1)
pss << Pessoa.new(87,57,1,"10/07/52",0,".","20/09/52",72,1)
pss << Pessoa.new(49,55,1,"05/06/50",0,".","08/04/51",307,1)
pss << Pessoa.new(35,45,1,"18/05/49",1,"27/01/50","15/09/51",850,1)
pss << Pessoa.new(99,52,1,"19/02/53",1,"10/03/53","04/09/53",197,1)
pss << Pessoa.new(9,59,1,"09/06/47",0,".","28/11/47",172,1)
pss << Pessoa.new(13,47,1,"16/09/47",1,"01/07/49","15/08/49",699,1)
pss << Pessoa.new(93,56,1,"10/11/52",1,"12/12/52","07/05/54",543,1)
pss << Pessoa.new(14,58,1,"24/10/47",0,".","23/04/49",547,1)
pss << Pessoa.new(40,59,1,"07/10/49",1,"09/07/50","07/03/52",882,1)
pss << Pessoa.new(8,40,1,"02/06/47",0,".","21/11/47",172,1)
pss << Pessoa.new(78,49,1,"03/12/51",1,"06/05/52","30/05/52",179,1)
pss << Pessoa.new(15,51,1,"30/11/47",1,".","28/12/49",759,1)
pss << Pessoa.new(48,55,1,"18/05/50",0,".","09/09/50",114,1)
pss << Pessoa.new(90,48,1,"06/10/52",1,"31/03/53","15/06/54",617,0)
pss << Pessoa.new(7,56,1,"20/05/47",0,".","10/02/49",632,1)
pss << Pessoa.new(51,54,1,"13/06/50",1,".","01/05/53",1053,1)
pss << Pessoa.new(1,48,1,"18/02/47",0,".","19/09/48",579,1)
pss << Pessoa.new(41,53,1,"03/11/49",1,"19/12/51","12/05/52",921,1)
pss << Pessoa.new(28,54,1,"24/12/48",0,".","03/05/49",130,1)
pss << Pessoa.new(55,70,1,"15/08/50",0,".","06/10/50",52,1)
pss << Pessoa.new(27,61,1,"17/11/48",1,"14/04/53","10/10/53",1788,1)
pss << Pessoa.new(44,65,1,"07/01/50",1,"30/01/52","07/11/52",1035,1)
pss << Pessoa.new(84,60,1,"11/03/52",0,".","11/12/52",275,1)
pss << Pessoa.new(96,62,1,"31/12/52",1,"13/01/53","05/02/53",36,1)
pss << Pessoa.new(31,68,1,"03/03/49",0,".","02/01/50",305,1)
pss << Pessoa.new(53,65,1,"08/07/50",1,"25/05/51","15/12/53",1256,0)
pss << Pessoa.new(5,61,1,"16/04/47",0,".","27/05/50",1137,1)
pss << Pessoa.new(60,65,1,"09/11/50",1,"22/11/50","29/06/51",232,1)
pss << Pessoa.new(91,66,1,"11/10/52",1,"15/11/52","10/02/54",487,0)
pss << Pessoa.new(75,69,1,"26/09/51",1,"19/11/51","09/02/52",136,1)
pss << Pessoa.new(85,70,1,"08/05/52",0,".","15/07/52",68,1)
pss << Pessoa.new(17,67,1,"10/12/47",1,"07/01/53","19/09/53",2110,1)
pss << Pessoa.new(71,60,1,"08/06/51",0,".","06/08/51",59,1)
pss << Pessoa.new(95,67,1,"25/11/52",1,"02/02/53","20/10/53",329,1)
pss << Pessoa.new(16,63,1,"18/11/47",1,"24/11/48","26/05/54",2381,0)
pss << Pessoa.new(69,60,1,"18/05/51",1,"15/09/51","24/11/51",190,1)
pss << Pessoa.new(4,60,1,"10/04/47",1,".","07/05/49",758,1)
pss << Pessoa.new(79,64,1,"19/12/51",0,".","29/01/52",41,1)
pss << Pessoa.new(72,67,1,"25/06/51",0,".","17/11/51",145,1)
pss << Pessoa.new(39,61,1,"27/09/49",1,"18/10/49","11/07/50",287,1)
pss << Pessoa.new(61,78,1,"16/11/50",0,".","13/09/51",301,1)
pss << Pessoa.new(34,66,1,"05/05/49",0,".","14/08/51",831,1)
pss << Pessoa.new(97,72,1,"12/01/53",1,"04/02/53","08/03/53",55,1)
pss << Pessoa.new(66,65,0,"17/03/51",0,".","18/09/51",185,1)
pss << Pessoa.new(73,69,1,"13/09/51",0,".","24/10/51",41,1)
pss << Pessoa.new(38,70,1,"12/09/49",1,"22/10/51","15/06/52",1007,0)
pss << Pessoa.new(64,65,1,"26/01/51",1,"12/04/51","06/06/51",131,1)
pss << Pessoa.new(19,63,1,"21/04/48",1,"08/07/48","08/07/48",78,1)
pss << Pessoa.new(63,68,0,"15/01/51",1,"15/02/51","08/02/52",389,1)
pss << Pessoa.new(92,72,1,"15/10/52",0,".","28/01/53",105,1)
pss << Pessoa.new(18,64,1,"31/12/47",1,"30/03/51","22/02/54",2245,0)
pss << Pessoa.new(3,66,1,"08/04/47",0,".","02/07/51",1546,1)
pss << Pessoa.new(47,67,1,"11/05/50",0,".","16/05/51",370,1)
pss << Pessoa.new(10,63,1,"21/07/47",0,".","19/05/52",1764,1)
pss << Pessoa.new(65,67,1,"15/03/51",1,"07/05/51","10/02/52",332,1)
pss << Pessoa.new(94,62,1,"17/11/52",1,"15/12/52","19/11/53",367,1)
pss << Pessoa.new(68,62,1,"08/05/51",1,"23/05/51","27/07/54",1176,0)
pss << Pessoa.new(81,69,1,"25/01/52",0,".","04/02/54",741,1)
pss << Pessoa.new(33,60,0,"31/03/49",1,"25/04/49","15/05/49",45,1)
pss << Pessoa.new(29,67,1,"01/02/49",0,".","09/02/50",373,1)
pss << Pessoa.new(42,62,1,"17/11/49",0,".","14/02/50",89,1)
quadrante = {}
quadrante[true] = {:novo => [], :velho => []}
quadrante[false] = {:novo => [], :velho => []}
pss.each do |p|
quadrante[p.aconselha?][p.faixa_etaria] << p
end
def build_quadrante(q)
dias = 0.0
obitos = 0.0
q.each do |p|
dias += p.tempo
obitos += p.obito
end
Amostra.new(q.size, obitos, dias / 365.0)
end
def quad(pss, &block)
l = []
pss.each do |p|
l << p if yield(p)
end
build_quadrante(l)
end
amostra_1 = build_quadrante(quadrante[true][:novo])
amostra_2 = build_quadrante(quadrante[true][:velho])
amostra_3 = build_quadrante(quadrante[false][:novo])
amostra_4 = build_quadrante(quadrante[false][:velho])
puts ""
puts "Exercicio 1"
puts "Aconselhados, novos: #{amostra_1.lamb}"
puts "Aconselhados, velhos: #{amostra_2.lamb}"
puts "Nao aconselhados, novos: #{amostra_3.lamb}"
puts "Nao aconselhados, velhos: #{amostra_4.lamb}"
puts ""
puts "Exercicio 2"
puts "Aconselhados, novos: #{(amostra_1.R_parcial(1.0/365*60))}"
puts "Aconselhados, velhos: #{(amostra_2.R_parcial(1.0/365*60))}"
puts "Nao aconselhados, novos: #{(amostra_3.R_parcial(1.0/365*60))}"
puts "Nao aconselhados, velhos: #{(amostra_4.R_parcial(1.0/365*60))}"
# 3 explicar que fiquei na duvida
puts ""
puts "Exercicio 3"
novos = quad(pss) do |p|
p.faixa_etaria == :novo
end
velhos = quad(pss) do |p|
p.faixa_etaria == :velho
end
p novos.lamb
p velhos.lamb
# Calcule o SMR considerando não aconselhados como a população
# de estudo e aconselhados como a população de referência.
estudo = quad(pss) do |p|
!p.aconselha?
end
referencia = quad(pss) do |p|
p.aconselha?
end
puts ""
puts "Exercicio 4"
puts "Lambda aconselhados: #{referencia.lamb}"
puts "Lambda nao aconselhados: #{estudo.lamb}"
puts "SMR: #{estudo.lamb / referencia.lamb}"
# A partir das tabelas 2 e 3, calcule os coeficientes específi-
# cos por idade e o coeficiente bruto de incidência de câncer
# da boca em cada sexo. Compare os dois coeficientes brutos.
faixas = [
Amostra.new(0,0,0),
Amostra.new(1,0,2),
Amostra.new(0,0,0),
Amostra.new(5,0,5),
Amostra.new(9,1,9),
Amostra.new(9,0,9),
Amostra.new(24+5,7+1,24),
Amostra.new(39+6,11+1,(45)),
Amostra.new(75+12,23+1,(75+12)),
Amostra.new(110+13,37+3,(123)),
Amostra.new(102+24,41+4,(126)),
Amostra.new(147,46,(147)),
Amostra.new(126,32,(126)),
Amostra.new(107,39,(107)),
Amostra.new(112,32,(112)),
Amostra.new(50,18,(50)),
Amostra.new(46,17,(46))
]
puts ""
puts "Exercicio 5"
i = 0
faixas.each do |f|
i = i + 1
puts "Faixa etaria #{i}: #{f.lamb}"
end
def build_quadrante_anos(q)
anos = 0.0
obitos = 0.0
q.each do |p|
anos += p.tempo
obitos += p.obi
end
Amostra.new(q.size, obitos, anos)
end
masc = [
Amostra.new(0,0,0),
Amostra.new(1,0,2),
Amostra.new(0,0,0),
Amostra.new(5,0,5),
Amostra.new(6,1,6),
Amostra.new(7,0,7),
Amostra.new(24,7,24),
Amostra.new(39,11,(39)),
Amostra.new(75,23,(75)),
Amostra.new(110,37,(110)),
Amostra.new(102,41,(102)),
Amostra.new(129,41,(129)),
Amostra.new(99,28,(99)),
Amostra.new(82,34,(82)),
Amostra.new(85,28,(85)),
Amostra.new(43,17,(43)),
Amostra.new(31,11,(31))
]
fem = []
i = 0
masc_p = [326768, 334692, 300761, 275881, 298175, 256425, 225343, 199436, 182523, 138689, 105660, 83668, 64066, 43796, 27285,13211, 11483]
fem_p = [317911, 328905, 304389, 308332, 307409, 258680, 228486, 203471, 185507, 143313, 115341, 93312, 73869, 52697, 34896, 18772, 19023]
bruto_masc = 0
bruto_fem = 0
masc.each do |am|
t = faixas[i]
bruto_masc = bruto_masc + masc_p[i] * am.R
f = Amostra.new(t.pop - am.pop, t.obi - am.obi, t.tempo - am.tempo)
fem << f
bruto_fem = bruto_masc + fem_p[i] * f.R
i = i + 1
end
puts "Bruto masculino: #{bruto_masc}"
puts "Bruto feminino: #{bruto_fem}"
puts "Dif brutos: #{bruto_masc / bruto_fem}"
puts "O coeficiente bruto feminino é maior que o masculino."
puts ""
puts "Exercicio 6"
i = 0
am_masc = build_quadrante_anos(masc)
am_fem = build_quadrante_anos(fem)
puts "lamda masc = #{am_masc.lamb}"
puts "lamda fem = #{am_fem.lamb}"
puts "SMR = #{am_masc.lamb / am_fem.lamb}"
puts "O indicador demonstra que as ocorrências ocorrem em mais frequencia no sexo masculino que no sexo feminino"
puts "Isso demonstra como existe alguma outra variável (possivelmente a faixa etária) que influencia fortemente esses coeficientes."
puts "Tais dados dispares costumam mostrar que existe uma outra dimensão (a outra variavel) que é preciso tomar em conta na hora de fatiar a população para a análise."
puts ""
puts "Exercicio 7"
puts "Probabilidade de #{am_fem.R_parcial(10)}"
Guilherme de Azevedo Silveira
Numero USP 3463934
Resultado de saída dos calculos
Exercicio 1
Aconselhados, novos: 0.0136988974827056
Aconselhados, velhos: 0.0157418056354227
Nao aconselhados, novos: 0.0471210947585851
Nao aconselhados, velhos: 0.0433080208827717
Exercicio 2
Aconselhados, novos: 0.0022493399936514
Aconselhados, velhos: 0.00258434888280612
Nao aconselhados, novos: 0.00771601095187302
Nao aconselhados, velhos: 0.00709384576617156
Exercicio 3
0.0112098395979445
0.0121647597583802
Exercicio 4
Lambda aconselhados: 0.00733570269441599
Lambda nao aconselhados: 0.0225670829726722
SMR: 3.07633554858357
Exercicio 5
Faixa etaria 1: 0
Faixa etaria 2: 0.0
Faixa etaria 3: 0
Faixa etaria 4: 0.0
Faixa etaria 5: 0.0123456790123457
Faixa etaria 6: 0.0
Faixa etaria 7: 0.0114942528735632
Faixa etaria 8: 0.00592592592592593
Faixa etaria 9: 0.00317082837891399
Faixa etaria 10: 0.00264392887831317
Faixa etaria 11: 0.00283446712018141
Faixa etaria 12: 0.00212874265352399
Faixa etaria 13: 0.00201562106324011
Faixa etaria 14: 0.00340641104026553
Faixa etaria 15: 0.00255102040816327
Faixa etaria 16: 0.0072
Faixa etaria 17: 0.00803402646502836
Bruto masculino: 343420.286813354
Bruto feminino: 349691.788577618
Dif brutos: 0.982065630451966
O coeficiente bruto feminino é maior que o masculino.
Exercicio 6
lamda masc = 0.0195611021524224
lamda fem = 0.0115018074268814
SMR = 1.70069810999489
O indicador demonstra que as ocorrências ocorrem em mais frequencia no sexo masculino que no sexo feminino
Isso demonstra como existe alguma outra variável (possivelmente a faixa etária) que influencia fortemente esses coeficientes.
Tais dados dispares costumam mostrar que existe uma outra dimensão (a outra variavel) que é preciso tomar em conta na hora de fatiar a população para a análise.
Exercicio 7
Probabilidade de 0.108649966738871
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment