{{:bie5782:01_curso_atual:alunos:trabalho_final:thamykarlovic:img-20171015-wa0003.jpg?200|}} ====== Thamíris Christina Karlovic de Abreu ====== Doutoranda em Oceanografia (Concentração: Oceanografia Biológica), Instituto Oceanográfico - USP O título da minha tese é: "Conectividade da raia-viola //Pseudobatos percellens// (Walbaum, 1792) no arquipélago dos Alcatrazes: Modelagem da dinâmica espaço-temporal", orientada pela Professora June Ferraz Dias. e mail: thamykarlovic@usp.br [[.:exec]] ====== Proposta A ====== Reprodução de Peixes Contextualização: Conhecer o período de desova dos peixes permite inferências a cerca dos aspectos biológicos e dos processos ecológicos do táxon. Tais informações são essenciais nas tomadas de decisão tanto para o manejo de conservação das espécies quanto para sua exploração como recurso alimentar. Dentre as metodologias existentes, a classificação macroscópica das gônadas (principalmente dos ovários) e a avaliação dos índices gonadais e dos fatores de condição, correspondem ás técnicas de maior acessibilidade e praticidade, sendo recorrente a utilização na análise inicial dos dados. Normalmente, os resultados obtidos pela variação dos índices/fatores e das frequências dos estágios de maturidade, são contrapostos, fornecendo perspectivas quanto ao momento de desova da espécie durante o intervalo de tempo estudado. Por exemplo, valores elevados da relação gonadossomática (RGS) são um reflexo do aumento de peso e tamanho dos ovários devido ao processo de maturação ovocitária. O valor de pico desta relação seguido de queda corresponde á perda de peso da gônada pela liberação dos ovócitos, sendo, portanto, um indicador do seu estado funcional. Por sua vez, a maior frequência de espécimes classificados como maduros (estágio C) durante o período de brusca variação da RGS aumentam a probabilidade de acerto quanto á identificação do(s) momento(s) de desova. Logo, a ocorrência deste padrão mais de uma vez em um ciclo reprodutivo, pode indicar diferentes eventos de desova. Descrição: Com base nas informações fornecidas, têm-se como objetivo desenvolver uma função que identifique os prováveis momentos de desova. A função irá tratar dados de quatro variáveis contínuas e três categóricas, para a obtenção dos seguintes indicadores quantitativos da maturidade gonadal em peixes: * Relação gonadossomática 1 e 2 (RGS) * Índice gonadal (Ig) Entrada: rep.fish(LT, WT, WG, WB, sex, period, stages) * LT = Um vetor numérico contínuo contendo os valores individuais de comprimento total em mm. * WT = Um vetor numérico contínuo contendo os valores individuais do peso corpóreo total em gramas. * WG = Um vetor numérico contínuo contendo os valores individuais do peso das gônadas em gramas. * WB = Um vetor numérico contínuo contendo os valores individuas do peso do corpo (WT-WG) em gramas. * sex = Um vetor da classe fator contendo o sexo de cada indivíduo (F ou M). * period = Um vetor da classe fator contendo os períodos de coleta determinados pelo usuário da função. * stages = Um vetor da classe fator contendo os estágios macroscópicos de maturidade gonadal* (A= imaturo, B= em maturação, C=maduro, D=desovado). Os valores ausentes serão preenchidos por NA. *Utilizado o estágio macroscópico de maturidade gonadal proposto por Vazzoler (1982). Verificação dos parâmetros: * LT é um vetor numérico com valores maiores que 0? Se não, retornar: “Verifique seus dados! LT é numérico e >0.” * WT é um vetor numérico com valores maiores que 0? Se não, retornar: “Verifique seus dados! WT é numérico e >0.” * WG é um vetor numérico com valores maiores que 0 e NA's para valores ausentes? Se não, retornar: “Verifique seus dados! WG é >0 ou =NA.” * WB é um vetor numérico com valores maiores que 0 e NA's para valores ausentes? Se não, retornar: “Verifique seus dados! WB é >0 ou =NA.” * sex é igual a “F” ou “M”? Se não, retornar: “Verifique seus dados! sex = “F” ou “M”.” * period é inteiro e positivo? Se não, retornar: “Verifique seus dados! period tem que ser um inteiro e positivo.” * stages é igual a “A”, “B”, “C” ou “D”? Se não, retornar: “Verifique seus dados! Eles têm que estar classificados em um dos seguintes estágios de maturidade: A= imaturo, B= em maturação, C=maduro ou D=desovado”. Pseudo-código: - Criar um objeto //fishes// do tipo dataframe - Utilizar a função “if” para discrimiar o sexo das amostras. - Obter a relação para sexos agrupados entre WT e LT a partir de um modelo de regressão não linear lm(log(WT)~log(LT)) - Guardar nos objetos //coef.a// e //coef.b// o valores dos coeficientes α e β, respectivamente, estimados na regressão anterior - Criar área para os gráficos - Plotar os valores observados de WT x LT - Inserir linha de tendência da regressão - Obter as variações das médias e os erros padrão de RGS1 (ambos os sexos) e RGS2 (fêmeas) entre os períodos a partir das equações: * RGS1= (WG/WT)*100 * RGS2= (WG/WB)*100 - Obter as variações das médias e os erros padrão de Ig para fêmeas entre os períodos a partir da equação: * Ig= WG/LT^β Onde β é o coeficiente //coef.b// estimado pelo modelo de regressão não linear (passo 3) - Obter a variação das frequências relativas dos indivíduos em estágio de maturidade C por sexo e entre os períodos e guardar no objeto //freq.t// - Exibir o gráfico das variações de frequência por período para machos e fêmeas - Adicionar valores às variações de frequências de forma que a menor delas seja 0 - Aplicar teste t sobre as novas variações de frequência para inferir se a menor delas (0) é significativa perante o conjunto total de dados. Se for rejeitada a hipótese nula, este será considerado o principal período de desova - Obter o modelo de regressão lm(RGS2 ~ //freq.t$female//) para verificar se as frequências relativas dos grupos de indivíduos em estágio de maturidade C explicam os níveis de RGS obtidos em cada período - Plotar os gráficos de RGS e Ig e os erros em relação à média para cada período coletado, visando visualizar a dispersão do estado de condição gonadal Obs: para machos e fêmeas, RGS, e apenas para fêmeas, Ig e RGS 2. - Cálculo do Fator S, obtido por meio de análise dos componentes principais considerando as variações das médias de RGS, IG e das frequências relativas por período. - Identificação do(s) valor(es) destoante(s) de S, correspondente(s) ao(s) período(s) de desova. Saídas: - Scatterplot da relação WTxLT com a linha de tendência da regressão estimada - Gráficos dos índices calculados (RGS e Ig) e os erros em relação à média para cada período coletado. - Gráfico mostrando a frequência relativa do estágio de maturidade C por sexos, em relação ao total para cada período. - //Output// contendo: * os valores de α e β estimados pela relação WTxLT * resultado do teste t sobre período de maior frequência * valor estimado do fator S para cada período * mensagem de texto informando o potencial momento de desova Referências: FÁVERO, L. P.; BELFIORE, P. Manual de análise de dados: Estatística e Modelagem Multivariada com Excel, SPSS e Stata. Rio de Janeiro: Elsevier, 2007. FROESE, R. Cube law, condiction fator and weight-length relationships: history, meta-analysis and recommendations. J. Appl. Ichthyol, p. 241-253. 2006 HELFMAN, G. S.; COLLETTE, B. B.; FACEY, D. E.; BOWEN, B. W. The Diversity of Fishes: Biology, Evolution and Ecology. John Wiley & Sons, LTD. 2009. 2ºed. VAZZOLER, A. E. A. de M. Manual de métodos para estudos biológicos de populações de peixes. Reprodução e crescimento. Brasília: CNPq, 1981. 108 p. VAZZOLER, A. E. A. de M. Biologia da reprodução de peixes teleósteos: Teoria e prática. Maringá: EDUEM, 1996. 169 p. ====== Proposta B ====== Descrição: O acervo da Coleção Biológica Professor Edmundo Nonato (ColBIO) do Instituto Oceanográfico-USP abriga atualmente mais de sete décadas de amostras biológicas referentes ao plâncton, nécton e bentos, da costa brasileira e da Antártica. A informatização dos dados irá otimizar tanto o gerenciamento físico das amostras quanto, o processamento das informações a elas associadas (variáveis abióticas e dados dos cruzeiros oceanográficos). Contudo, a enorme quantidade de dados a serem armazenados e organizados está constantemente sujeitos a falhas relacionadas a erros de digitação, problemas de formatação e de configuração das planilhas, comprometendo assim a sua qualidade. Desta forma, a função irá tratar 13 das 72 colunas de informação existentes no banco de dados. A atribuição da função ocorrerá somente a estes dados devido a discrepante recorrência de erros, encontrados durante o processo manual de revisão. Além disso, a função irá gerar gráficos exploratórios da frequência de registro dos grupos taxonômicos identificados para todo o banco de dados já informatizado, frequência de registro do menor grupo taxonômico por local e ano de coleta e por cruzeiro oceanográfico. Entrada: col.bio(dados, state (opcional), year (opcional), project (opcional)) * dados = um dataframe em formato csv contendo as seguintes informações em colunas: * time.s = horário das estações oceanográficas * time.i = horário de início das coletas * time.f = horário de término das coletas * lat = latitude * long = longitude * depth.l = profundidade do local de coleta * depth.max = profundidade máxima coletada * depth.mim = profundidade mínima coletada * sal.max = salinidade na profundidade máxima coletada * sal.min = salinidade na profundidade mínima coletada * water.temp = temperatura da água * wtemp.max = temperatura da água na profundidade máxima coletada * wtemp.min = temperatura da água na profundidade mínima coletada * year = ano de coleta dos dados * state = Estado de referência da lat/long * project = projeto referente ao cruzeiro oceanográfico * family = referente ao nível taxonômico família dos espécimes contidos nas amostras * genus = referente ao nível taxonômico gênero dos espécimes contidos nas amostras * species = referente ao nível taxonômico espécie dos espécimes contidos nas amostras Verificação da entrada: * dados é um dataframe? Se não, retornar: "Verifique seus dados! dados precisa ser um dataframe." * time.s é da classe date e está entre 00:00 e 24:00? Se não, retornar: "Verifique seus dados! time.s corresponde a um horário entre 00:00 e 24:00." * time.i é da classe date e está entre 00:00 e 24:00? Se não, retornar: "Verifique seus dados! time.i corresponde a um horário entre 00:00 e 24:00." * time.f é da classe date, está entre 00:00 e 24:00 e é superior a time.i? Se não, retornar: "Verifique seus dados! time.f corresponde a um horário entre 00:00 e 24:00 superior a time.i." * lat é da classe numeric e está entre 0° e -90°? Se não, retornar: "Verifique seus dados! Você precisa estar no hemisfério Sul." * long é da classe numeric e está entre 0° e -180°? Se não, retornar: "Verifique seus dados! Você precisa estar a oeste do Meridiano." * depth.l é da classe numeric e superior à 0? Se não, retornar: “Verifique seus dados! depth.l >0.” * depth.max é da classe numeric, superior à 0 e maior que depth.min? Se não, retornar: “Verifique seus dados! depth.max é maior que 0 e depth.mim.” * depth.mim é da classe numeric, superior à 0 e menor que depth.max? Se não, retornar: “Verifique seus dados! depth.min é maior que 0 e menor que depth.max.” * sal.max é da classe numeric, 0sal.max? Se não, retornar: “Verifique seus dados! 0sal.max.” * water.temp é da classe numeric? Se não, retornar: “Verifique seus dados! water.temp é da classe numeric.” * wtemp.max é da classe numeric e menor que wtemp.min? Se não, retornar: "Verifique seus dados! wtemp.maxwtemp.max." * year é da classe numeric? Se não, retornar: "Verifique seus dados! state é da classe numeric.” * state é da classe character? Se não, retornar: "Verifique seus dados! state é da classe character.” * project é da classe character? Se não, retornar: "Verifique seus dados! project é da classe character.” * family é da classe character? Se não, retornar: “Verifique seus dados! family é da classe character.” * genus é da classe character? Se não, retornar: “Verifique seus dados! genus é da classe character.” * species é da classe character? Se não, retornar: “Verifique seus dados! genus é da classe character.” Pseudo-código: - Entrar com um objeto do tipo dataframe contendo as colunas indicadas acima. - Realizar a verificação dos dados em cada uma das colunas. - Caso sejam definidos os parâmetros "state", "year" e "project", a função "if" será utilizada para buscar os dados correspondentes no dataframe. - Encontradas as linhas que contém o parâmetro definido, será criado um sub-dataframe apenas com as amostras que atendem aos parâmetros. - A partir do dataframe será utilizada a função "hist" para gerar três histogramas com as frequências das espécies, famílias e ordens de todas as observações. - Se forem definidos os parâmetros, o histograma mostrará apenas as frequências dos dados correspondentes. Saídas: - Histogramas com as frequências das espécies, famílias e ordens da amostra (seguindo ou não os parâmetros). - Contagem das espécies, famílias e ordens. Oi Thamíris! Suas duas propostas são interessantes mas ainda um pouco simples. A proposta B é simples demais, e não envolve nenhum desafio de programação interessante, nem tem um apelo mais geral. A proposta A tem mais futuro, mas ainda está genérica demais, parecendo um "script que eu preciso" disfarçado de função. Talvez tenha algum problema mais específico dentro desse assunto que seja mais interessante. Eu pensei talvez numa função que tente identificar o momento das desovas, ou quantas desovas ocorreram numa amostra. Isso seria legal pra vc poder comparar duas amostras, por exemplo. Que tal? Me escreva no email quando responder aqui. --- //[[diogro@gmail.com|Diogo Melo]] 2018/05/10 // Olá Diogo, muito obrigada pelas considerações. Gostei muito das suas críticas! Construí uma linha de raciocínio confrontando os valores estimados pelos índices que propus com os estágios macroscópicos de maturidade gonadal (outro método para se obter informações sobre o ciclo reprodutivo). Poderíamos agendar uma reunião? Ficaria mais fácil de explicar minha ideia e poder dar continuidade ao desenvolvimento do trabalho. Se você preferir, posso enviar a proposta reformulada para o seu e mail. Mais uma vez, muito obrigada! ====== Trabalho Final ====== Arquivo da função rep.fish: {{:bie5782:01_curso_atual:alunos:trabalho_final:thamykarlovic:rep1.fish.r|}} Arquivo do help: {{:bie5782:01_curso_atual:alunos:trabalho_final:thamykarlovic:help_rep.fish.r|}} Base de dados para o help:{{:bie5782:01_curso_atual:alunos:trabalho_final:thamykarlovic:sp.teste.csv|}} ### Função rep.fish ### # Construindo a função rep.fish<-function(specie, LT, WT, WG, WB, sex, period, stages) { if(class(specie)!= "character") # Verifica se o argumento "specie" é um string de letras { stop("Verifique seus dados! specie deve ser o nome de uma espécie") # Se não, a função é interrompida e uma menssagem de erro fornecida ao usuário } if(class(LT)!= "integer" & class(LT)!= "numeric" | any(LT<=0)) # Verifica se o argumento "LT" está em mm, cm ou metros e se há valores negativos { stop("Verifique seus dados! LT deve ser inteiro ou numérico e >0") # Se não, a função é interrompida e uma menssagem de erro fornecida ao usuário } if(class(WT)!= "numeric" | any(WT<=0)) #Verifica se o argumento "WT" está correto { stop("Verifique seus dados! WT deve ser numérico e >0") # Se não, a função é interrompida e uma menssagem de erro fornecida ao usuário } if(class(WG)!= "numeric" | any(WG < 0, na.rm = TRUE)) #Verifica se "WG" é numérico positivo e se há valores perdidos { stop("Verifique seus dados! WG deve ser numérico ou =NA") # Se não, a função é interrompida e uma menssagem de erro fornecida ao usuário } if(class(WB)!= "numeric" | any(WB<=0, na.rm = TRUE)) #Verifica se "WB" é numérico positivo e se há valores perdidos { stop("Verifique seus dados! WB deve ser numérico ou =NA") # Se não, a função é interrompida e uma menssagem de erro fornecida ao usuário } if(class(sex)!= "factor" | any(sex != "M" & sex != "F", na.rm = TRUE)) #Verifica se "sex" é um fator com duas categorias { stop("Verifique seus dados! sex = F ou M") # Se não, a função é interrompida e uma menssagem de erro fornecida ao usuário } if(class(period)!= "integer") # Verifica se "period" contem valores inteiros correspondentes á cada período de coleta { stop("Verifique seus dados! period deve conter períodos enumerados em ordem de coleta (ex. Jan= 1, Fev= 2... ou 2011= 1, 2012= 2)") } if(class(stages)!= "factor" | any(stages!="A" & stages!="B" & stages!="C" & stages!="D", na.rm = TRUE)) # Verifica se "stages" foi inserido corretamente { stop("Verifique seus dados! Eles têm que estar classificados em um dos seguintes estágios de maturidade gonadal: A, B, C ou D")# Se não, a função é interrompida e uma menssagem de erro fornecida ao usuário } # Criando o objeto fishes do tipo dataframe fishes<-data.frame(specie, LT, WT, WG, WB, sex, period, stages) # Cria um dataframe com as entradas da função # Obtendo a relação peso x comprimento e guardando os valores não logaritimizados dos coeficientes estimados relation<-lm(log(WT)~log(LT), data = fishes) # Obtem a relação WTxLT por meio de um modelo não linear coef.a<-exp(summary(relation)$coefficients[1, 1]) # Guarda o valor estimado não transformado de alfa no objeto coef.a coef.b<-summary(relation)$coefficients[2, 1] # Guarda o valor estimado de beta no objeto coef.b # Preparando espaço gráfico x11() # Abrir um dispositivo de tela par(mfrow= c (3,3), bty="l", tcl=-0.2) # Dividir o espaço gráfico em 3 colunas plot(WT~LT, data=fishes, xlab="Total length", ylab="Total weight", cex.lab=1.2) # Plota a relação entre peso total(WT) e comprimento total(LT) curve(( coef.a*(x^coef.b)) , from = min(fishes$LT) , to=max(fishes$LT) , add=TRUE, lwd=1.5, col="red") # Insereve a curva estimada da regressão não linear # Calculando RGS1 gonado.relation1<-c((fishes$WG/fishes$WT)*100) # Obtem a RGS1 para cada espécime fishes$RGS1<-NA # Cria uma coluna para os valores calculados de RGS1 no dataframe fishes fishes$RGS1<-gonado.relation1 # Insere os valores calculados da RGS1 no dataframe fishes # Obtendo as medias de posição e dispersão por sexo mean1<-aggregate(fishes$RGS1, by=list(fishes$sex, fishes$period), mean, na.rm=TRUE)# Calcula os valores médios de RGS1 por período para cada sexo sd1<-aggregate(fishes$RGS1, by=list(fishes$sex, fishes$period), sd, na.rm=TRUE )# Calcula o desvio padrão dos valores de RGS1 por período para cada sexo sd1<-c(sd1$x)# Guarda somente os valores calculados de desvio padrão no objeto sd1 se1<-c(sd1/sqrt(sum(!is.na(fishes$RGS1))))# Calcula os erros padrão dos valores médios de RGS1 por período e para cada sexo # Calculando a amplitude de variação do erro se.sup<-mean1$x+se1# Calcula o valor máximo que os valores de RGS1 podem ter se.inf<-mean1$x-se1# Calcula o valor mínimo que os valores de RGS1 podem ter # Obtendo dataframes por sexo mean1[ ,4:7]<-NA # Cria colunas no objeto mean1 para inserir os valores dos parâmetros calculados mean1[ ,4]<-sd1 # Insere os valores calculados do desvio padrão mean1[ ,5]<-se1 # Insere os valores calculados do erro padrão mean1[ ,6]<-se.sup # Insere os valores máximos da RGS1 mean1[ ,7]<-se.inf # Insere os valores mínimos da RGS1 measures.f<-mean1[mean1$Group.1=="F",]# Obtem de mean1 apenas os valores calculados para fêmeas measures.m<-mean1[mean1$Group.1=="M",]# Obtem de mean1 apenas os valores calculados para machos # Gráficos de RGS1 plot(measures.f$Group.2, measures.f$x, xlab="Periods", ylab="RGS1 - femeales", cex.lab=1.2, pch=16)# Plota os valores médios de RGS1 das fêmeas por períodos axis(side=1, at=measures.f$Group.2)# Desenha no eixo x as marcações para todos os períodos arrows(x0=measures.f$Group.2,y0=measures.f$V6, y1=measures.f$V7, code=3, angle=90, length=0.05)# Desenha as barras dos erros padrão plot(measures.m$Group.2, measures.m$x, xlab="Periods", ylab="RGS1 - males", cex.lab=1.2, pch=16)# Plota os valores médios de RGS1 dos machos por períodos axis(side=1, at=measures.m$Group.2)# Desenha no eixo x as marcações para todos os períodos arrows(x0=measures.m$Group.2,y0=measures.m$V6, y1=measures.m$V7, code=3, angle=90, length=0.05)# Desenha as barras dos erros padrão # Obtendo a variação das médias var1 <- diff(mean1$x)# Obtem a variação dos valores médios de RGS1 # Calculando RGS2 fishes.f<-fishes[fishes$sex=="F",] # Filtra os valores do dataframe fishes para fêmeas e os armazena no objeto fishes.f gonado.relation2<-c((fishes.f$WG/fishes.f$WB)*100)# Calcula a RGS2 para cada fêmea fishes.f$RGS2<-NA # Cria uma coluna para os valores calculados de RGS2 no dataframe fishes.f fishes.f$RGS2<-gonado.relation2# Insere os valores calculados da RGS2 no dataframe fishes.f # Obtendo as medias de posição e dispersão mean2<-aggregate(fishes.f$RGS2, by=list(fishes.f$period), mean, na.rm=TRUE)# Calcula os valores médios de RGS2 por período sd2<-aggregate(fishes.f$RGS2, by=list(fishes.f$period), sd, na.rm=TRUE)# Calcula o desvio padrão dos valores de RGS2 por período sd2<-c(sd2$x)# Guarda somente os valores calculados de desvio padrão no objeto sd2 se2<-c(sd2/sqrt(sum(!is.na(fishes.f$RGS2))))# Calcula os erros padrão dos valores médios de RGS2 por período # Calculando a amplitude de variação do erro se.sup2<-mean2$x+se2# Calcula o valor máximo que os valores de RGS2 podem ter se.inf2<-mean2$x-se2# Calcula o valor mínimo que os valores de RGS2 podem ter # Obtendo dataframe mean2[ ,3:6]<-NA # Cria colunas no objeto mean2 para inserir os valores dos parâmetros calculados mean2[ ,3]<-sd2 # Insere os valores calculados do desvio padrão mean2[ ,4]<-se2 # Insere os valores calculados do erro padrão mean2[ ,5]<-se.sup2 # Insere os valores máximos da RGS2 mean2[ ,6]<-se.inf2 # Insere os valores mínimos da RGS2 # Gráfico de RGS2 plot(mean2$Group.1, mean2$x, xlab="Periods", ylab="RGS2", cex.lab=1.2, pch=16)# Plota os valores médios de RGS2 por períodos axis(side=1, at=mean2$Group.1)# Desenha no eixo x as marcações para todos os períodos arrows(x0=mean2$Group.1,y0=mean2$V5, y1=mean2$V6, code=3, angle=90, length=0.05)# Desenha as barras dos erros padrão # Obtendo a variação das médias var2 <- diff(mean2$x)# Obtem a variação dos valores médios de RGS2 # Calculando IG gonad.index<-c(fishes.f$WG/(fishes.f$LT^coef.b))# Calcula o IG para cada fêmea fishes.f$IG<-NA # Cria uma coluna para os valores calculados de IG no dataframe fishes.f fishes.f$IG<-gonad.index # Insere os valores calculados de IG no dataframe fishes.f # Obtendo as medias de posição e dispersão mean3<-aggregate(fishes.f$IG, by=list(fishes.f$period), mean, na.rm=TRUE)# Calcula os valores médios de IG por período sd3<-aggregate(fishes.f$IG, by=list(fishes.f$period), sd, na.rm=TRUE) # Calcula o desvio padrão dos valores de IG por período sd3<-c(sd3$x)# Guarda somente os valores calculados de desvio padrão no objeto sd3 se3<-c(sd3/sqrt(sum(!is.na(fishes.f$IG))))# Calcula os erros padrão dos valores médios de IG por período # Calculando a amplitude de variação do erro se.sup3<-mean3$x+se3# Calcula o valor máximo que os valores de IG podem ter se.inf3<-mean3$x-se3# Calcula o valor mínimo que os valores de IG podem ter # Obtendo dataframe mean3[ ,3:6]<-NA # Cria colunas no objeto mean3 para inserir os valores dos parâmetros calculados mean3[ ,3]<-sd3# Insere os valores calculados do desvio padrão mean3[ ,4]<-se3# Insere os valores calculados do erro padrão mean3[ ,5]<-se.sup3# Insere os valores máximos da IG mean3[ ,6]<-se.inf3# Insere os valores mínimos da IG # Gráfico de IG plot(mean3$Group.1, mean3$x, xlab="Periods", ylab="IG", cex.lab=1.2, pch=16)# Plota os valores médios de IG por períodos axis(side=1, at=mean3$Group.1)# Desenha no eixo x as marcações para todos os períodos arrows(x0=mean3$Group.1,y0=mean3$V5, y1=mean3$V6, code=3, angle=90, length=0.05) # Desenha as barras dos erros padrão # Obtendo a variação das médias var3 <- diff(mean3$x)# Obtem a variação dos valores médios do IG #Obtendo a freq. relativa de C freq.tab.f <- table(fishes$stages[fishes$sex=="F"], fishes$period[fishes$sex=="F"]) freq.tab.f <- rbind(freq.tab.f, total = colSums(freq.tab.f)) freq.t.f <- freq.tab.f[3,]/freq.tab.f[5,] freq.v.f <- na.omit(diff(freq.t.f)) freq.tab.m <- table(fishes$stages[fishes$sex=="M"], fishes$period[fishes$sex=="M"]) freq.tab.m <- rbind(freq.tab.m, total = colSums(freq.tab.m)) freq.t.m <- freq.tab.m[3,]/freq.tab.m[5,] freq.v.m <- na.omit(diff(freq.t.m)) #Gráficos de frequências barplot(freq.t.f, xlab = "Periods", ylab = "C Stage Female Frequency", cex.lab=1.2, axis.lty = fishes$period)# Plota o gráfico das frequências do estágio C para fêmeas barplot(freq.t.m, xlab = "Periods", ylab = "C Stage Male Frequency", cex.lab=1.2, axis.lty = fishes$period)# Plota o gráfico das frequências do estágio C para machos #Ajuste das variações de frequência freq.a.f <- array(freq.v.f + abs(min(freq.v.f)) + 0.0000001) freq.a.m <- array(freq.v.m + abs(min(freq.v.m)) + 0.0000001) #Teste t (com o ajuste anterior, a maior queda de frequência é 0) teste.t.f <- t.test(freq.a.f) teste.t.m <- t.test(freq.a.m) #Modelo de regressão lm(RGS2 ~ freq.t$female) #Verifica se as frequências relativas dos grupos de indivíduos #em estágio de maturidade C explicam os níveis de RGS obtidos em cada período reg.rgs2 <- lm(mean2$x ~ freq.t.f) # Obtem o modelo de regressão entre os valores médios de RGS2 e #Cálculo do Fator S por PCA library("stats", lib.loc="C:/Program Files/R/R-3.4.4/library") #Carrega o pacote "stats" pca.data <- data.frame(var2, var3, freq.v.f) fishes.pca <- prcomp(pca.data, scale = TRUE)# Utiliza a função prcomp do pacote stats. #Referência: R Core Team and contributors worldwide. The R Stats Package. #Disponível em: . plot(fishes.pca, type = "l", main = NULL) pca.values <-summary(fishes.pca) #Obtendo o Fator S baseado nas proporções de variância e plotando fator.s = var2 * pca.values$importance[2,1] + var3 * pca.values$importance[2,2] + freq.v.f * pca.values$importance[2,3] # Localizando picos quedas = fator.s quedas[quedas >= 0] <- NA barplot(fator.s, xlab = "Periods", ylab = "S Factor variation") points(quedas, pch = 16, col = "Red")# Sinaliza em vermelho os prováveis momentos de desova #Output de informações print(summary(relation)) # Solta o output do modelo não linear lm(log(WT)~log(LT)) print(summary(reg.rgs2)) # Solta o output o modelo de regressão lm(RGS2 ~ freq.t$female) print(teste.t.f) # Solta o output do teste de t entre as frequências do estágio C print(fator.s) # Fornece os valores estimados pela PCA referentes ao fator S } rep.fish package:unknown R Documentation FUNÇÃO PARA VERIFICAR O PERÍODO DE DESOVA DE PEIXES Description: Função para identificar os prováveis momentos de desova de peixes através da varição de indicadores quantitativos (RGS2 e IG) e qualitativos (escala macacroscópica) da maturidade gonadal. A função fornce o score S e gráficos contendo a relação peso x comprimento com curva de tendência da população, as médias e erros padrão dos indicadores, a frequência relativa do estágio C, ambos para cada sexo e período coletado. Usage: rep.fish(specie, LT, WT, WG, WB, sex, period, stages) Arguments: specie: Um vetor da classe "character" contendo o nome da espécie cujos dados serão análisados. LT: Um vetor da classe "integer" ou "numeric" contendo os valores de tamanho corpóreo total (em mm, cm ou m), de cada espécime coletado. Os valores devem ser positivos e maiores que zero. WT: Um vetor da classe "numeric" contendo os valores de peso total (em g), de cada espécime coletado. Os valores devem ser positivos e maiores que zero. WG: Um vetor da classe "numeric" contendo os valores de peso da gonada (em g), de cada espécime coletado. Os valores devem ser positivos ou iguais a zero. WB: Um vetor da classe "numeric" contendo os valores de peso corpóreo (em g): WT-WG. Os valores devem ser positivos e maiores que zero. sex: Um vetor da classe "factor" contendo o sexo dos espécimes. Pode ter dois níveis: "F" ou "M". period: Um vetor da classe "integer" contendo os período enumerados. Ex: meses(Janeiro, Fevereiro, Março, ...) = (1, 2, 3, ...) stages: Um vetor da classe "factor" contendo o estágio de maturidade em que a gônada de cada espécime foi classifcada. Pode ter quatro níveis: "A", "B", "C", ou "D". Details: Para a entrada WG: Gônadas com pouco peso (valores próximos de zero), devem ter valor de WG correspondente á 0. Gônadas que não foram pesadas correspondem á NA. Para a entrada sex: Espécimes com o sexo não identificado ou que a gônada não foi localizada, devem corresponder á NA. Para a entrada stages: Fêmeas consideradas hidratadas, devem ser classificadas no estágio "C". Gônadas que não tiveram seu estágio de maturidade definido devem corresponder á NA.Para maiores informações ver Vazzoler (1981). Value: Output do modelo não linear da relação WTxLT. Output do modelo de regressão lm(RGS2 ~ freq.t$female). Output do teste de t entre as frequências do estágio C. Valor estimado do Fator S para as variações entre cada período. Scatterplot da relação WTxLT com a linha de tendência da regressão estimada. Gráficos dos índices calculados (RGS1, RGS2 e Ig) e os erros em relação à média para cada período coletado. Gráfico mostrando a frequência relativa do estágio de maturidade C por sexos para cada período. Gráfico de explicação da variância da PCA. Gráfico da variação do Fator S com prováveis períodos de desova sinalizados por pontos vermelhos. Warning: Se algum dos argumentos estiver incorreto, a função não será executada. Caso algum valor de erro padrão para as RGSs e/ou para o IG não possa ser calculado devido á um N insuficiente,a função retornará zero. Neste caso, o(s) respectivo(s) valor(es) de erro não será(ão) plotado(s) no gráfico e uma mensagem é de erro fornecida. Isso não impedirá a execução da função e não compromete os resultados. Author(s): Thamíris Christina Karlovic de Abreu e mail: thamycka@gmail.com References: FÁVERO, L. P.; BELFIORE, P. Manual de análise de dados: Estatística e Modelagem Multivariada com Excel, SPSS e Stata. Rio de Janeiro: Elsevier, 2007. FROESE, R. Cube law, condiction fator and weight-length relationships: history, meta-analysis and recommendations. J. Appl. Ichthyol, p. 241-253. 2006. HELFMAN, G. S.; COLLETTE, B. B.; FACEY, D. E.; BOWEN, B. W. The Diversity of Fishes: Biology, Evolution and Ecology. John Wiley & Sons, LTD. 2009. 2ºed. VAZZOLER, A. E. A. de M. Manual de métodos para estudos biológicos de populações de peixes. Reprodução e crescimento. Brasília: CNPq, 1981. 108 p. VAZZOLER, A. E. A. de M. Biologia da reprodução de peixes teleósteos: Teoria e prática. Maringá: EDUEM, 1996. 169 p. R Core Team and contributors worldwide. The R Stats Package. Disponível em: . Examples: Baixe a base de dados. teste<-read.table("sp.teste.csv", header = TRUE, sep = ";", dec=".") especie<-(as.character(teste$specie)) c.t<-c(teste$LT) p.t<-c(teste$WT) p.g<-c(teste$WG) p.b<-c(teste$WB) s<-(teste$sex) maturity<-(teste$EM) time<-c(teste$period) rep.fish(especie, c.t, p.t, p.g, p.b, s, time, maturity)