Aula Estatística Bivariada

Author

Maria Luiza D. Rocha, Gabriela Machado, Paula Brumana, Paloma Gonçalves-Grupo 1

Published

November 7, 2024

Code
library(rmarkdown)
library(ggplot2)
library(dplyr)

Anexando pacote: 'dplyr'
Os seguintes objetos são mascarados por 'package:stats':

    filter, lag
Os seguintes objetos são mascarados por 'package:base':

    intersect, setdiff, setequal, union
Code
library(plotly)

Anexando pacote: 'plotly'
O seguinte objeto é mascarado por 'package:ggplot2':

    last_plot
O seguinte objeto é mascarado por 'package:stats':

    filter
O seguinte objeto é mascarado por 'package:graphics':

    layout
Code
library(corrplot)
corrplot 0.95 loaded
Code
library(polycor)

Introdução

Nesta aula, vamos investigar as relações entre variáveis qualitativas e quantitativas, qualitativa e qualitativa, e quantitativa e quantitativa em um conjunto de dados relacionados à saúde e nutrição. Utilizaremos tabelas de contingência, gráficos e medidas estatísticas apropriadas para realizar esta análise.

Conjunto de dados

Running Code

Code
# Definindo semente para reprodutibilidade
set.seed(1231)

# Criando conjunto de dados simulado
n <- 150
dados <- data.frame(
  Idade = round(rnorm(n, mean = 40, sd = 15)),
  IMC = round(rnorm(n, mean = 25, sd = 4), 1),
  Atividade_Fisica = factor(sample(c("Baixa", "Moderada", "Alta"), n, replace = TRUE)),
  Fumante = factor(sample(c("Sim", "Não"), n, replace = TRUE)),
  Colesterol = round(rnorm(n, mean = 200, sd = 30)),
  Pressão_Arterial = round(rnorm(n, mean = 120, sd = 15))
)

# Visualizando as primeiras linhas do conjunto de dados
head(dados)
  Idade  IMC Atividade_Fisica Fumante Colesterol Pressão_Arterial
1    39 15.6            Baixa     Sim        200              112
2    50 26.3            Baixa     Sim        208              123
3    14 28.7         Moderada     Não        262               89
4    45 31.3            Baixa     Sim        191              129
5    71 27.6            Baixa     Não        202              122
6    35 34.3             Alta     Não        176              127

Relação entre Variáveis Qualitativas e Quantitativas

Exemplo: Relação entre Atividade Física e IMC

Para investigar a relação entre uma variável qualitativa (Atividade_Fisica) e uma quantitativa (IMC), podemos calcular estatísticas descritivas de IMC para cada nível de Atividade_Física.

Code
# Estatísticas descritivas do IMC por nível de Atividade Física
library(dplyr)
dados %>%
  group_by(Atividade_Fisica) %>%
  summarise(
    Média_IMC = mean(IMC),
    Mediana_IMC = median(IMC),
    Desvio_Padrão_IMC = sd(IMC)
  )
# A tibble: 3 × 4
  Atividade_Fisica Média_IMC Mediana_IMC Desvio_Padrão_IMC
  <fct>                <dbl>       <dbl>             <dbl>
1 Alta                  25.1        24.9              3.68
2 Baixa                 24.7        25.5              4.07
3 Moderada              24.7        25.0              4.70

Gráfico de boxplot para IMC por nível de Atividade Física

Code
# Gráfico de boxplot para IMC por nível de Atividade Física
library(ggplot2)

p<-ggplot(dados, aes(x = Atividade_Fisica, y = IMC, fill = Atividade_Fisica)) +
  geom_boxplot() +
  labs(title = "Boxplot de IMC por Nível de Atividade Física",
       x = "Nível de Atividade Física",
       y = "IMC") +
  theme_minimal()

p1<-ggplotly(p)

p1

Gráfico 1: Boxplot de IMC por Nível de Atividade Física

Interpretação:

O gráfico de boxplot exibe a distribuição do Índice de Massa Corporal (IMC) para cada nível de atividade física (“Baixa”, “Moderada”, “Alta”). Ele mostra os seguintes pontos principais:

  • Mediana (linha central): Representa o valor mediano de IMC em cada grupo de atividade física.

    • Os indivíduos com atividade física alta tendem a ter um IMC mediano um pouco menor (24,90) do que aqueles com atividade física moderada (24,95) e baixa (25,50).
  • Dispersão (caixa e bigodes): Indica a variação do IMC em cada grupo.

    • atividade física moderada apresenta uma maior variação no IMC, sugerindo que pessoas com atividade física moderada têm IMCs mais variados, enquanto a atividade física alta tem a menor dispersão.
  • Outliers (pontos fora da caixa e dos bigodes): Indivíduos com valores de IMC muito acima ou abaixo do esperado para cada grupo.

    • Alguns outliers são visíveis no grupo de atividade física moderada e alta, indicando a presença de indivíduos com IMC muito altos nesses grupos.

Conclusão: Há uma leve tendência de que, conforme aumenta o nível de atividade física, o IMC tende a diminuir, mas há também variações consideráveis dentro de cada grupo.

IMC está associado com a frequência de atividade física ?

Para investigar a associação entre uma variável qualitativa (como Atividade Física, caso seja dicotômica ou ordinal) e uma variável quantitativa contínua (como IMC), o coeficientie de correlação bisserial ou correlação polissérica são apropriados. Para calcular esses coeficientes no R, você pode usar pacotes como polycor, que oferece funções para obter tanto a correlação bisserial quanto a polissérica.

Correlação polissérica

Esse coeficiente é indicado se Atividade Física tiver mais de dois níveis ordenados (como “Nenhuma”, “Moderada”, “Alta”). Ele generaliza a correlação bisserial para uma variável qualitativa com categorias ordenadas e mede a associação entre uma variável contínua e uma qualitativa ordinal, assumindo uma normalidade latente subjacente.

Code
# Exemplo de dados para correlação polissérica
# Suponha uma variável contínua Y e uma variável ordinal X
polyserial_corr <- polyserial(dados$IMC,dados$Atividade_Fisica )

polyserial_corr
[1] -0.03650097
Interpretação dos Coeficientes de Correlação

Para interpretar os coeficientes de correlação bisserial e polissérica e testar sua significância, segue:

  1. **Correlação Polissérica ( $r_poly$): O coeficiente polissérico mede a associação entre uma variável contínua e uma variável ordinal, assumindo que a variável ordinal representa uma discretização de uma distribuição normal subjacente.
  • Valores altos de $r_ply$ (próximos de 1 ou -1) indicam uma associação forte entre a variável contínua e a variável ordinal, sugerindo uma mudança substancial nos valores médios ou na distribuição da variável contínua conforme as categorias da variável ordinal.
  • Valores baixos (próximos de 0) indicam uma associação fraca ou inexistente, sugerindo que as categorias da variável ordinal não correspondem a variações sistemáticas na variável contínua.

Testes de Significância

Para verificar a significância desses coeficientes, você pode aplicar testes estatísticos apropriados que avaliam a hipótese nula de que a correlação é zero (ou seja, que não há associação entre as variáveis).

1.Correlação Polissérica:

  • A significância do coeficiente de correlação polissérica é normalmente testada via estimativas de erro padrão obtidas durante o ajuste da correlação. Essas estimativas podem ser usadas para construir um teste z:

    $z=\frac{r_p_-{ErroP} $

    O coeficiente polissérico. Esse teste z pode ser usado para calcular o valor-p, assumindo uma distribuição normal padrão para o teste de significância.

    No pacote polycor em R, a função polyserial() fornece uma estimativa do erro padrão para a correlação polissérica, permitindo realizar o teste de significância.

Esses métodos ajudam a avaliar se os coeficientes são estatisticamente diferentes de zero, confirmando a existência de uma associação significativa entre as variáveis contínua e qualitativa.

Code
# Extraia o valor de r_poly e o erro padrão

# Extraia o valor de r_p
r_p<- polyserial_corr

# Tamanho da amostra
n <- length(dados$IMC)

# Calcule o valor do teste t para r_b
t_value <- r_p*sqrt((n - 2)/(1 - r_p^2))

# Calcule o valor-p para o teste t
p_value <- 2 * pt(-abs(t_value), df = n - 2)

# Resultados
cat("Correlação Polisserial aproximada (r_p):", r_p, "\n")
Correlação Polisserial aproximada (r_p): -0.03650097 
Code
cat("Valor t:", t_value, "\n")
Valor t: -0.4443496 
Code
cat("Valor-p:", p_value, "\n")
Valor-p: 0.6574389 
  1. Escolhido o nível de significância ,geralmente 5 % (0,05).

    Hípoteses do Teste :

    H0:rp=0

    H1:rp≠0

    Possíveis interpretações:

    Se o valor p<0,05, rejeita-se H0 e conclui-se que o coeficiente de correlação polissérico estimado é estattísticamente significativo .

    Se o valor p0,05 , NÃO rejeita-se H0 e conclui-se que o coeficiente de correlação polissérico estimado NÃO É estatísticamente significativo .

    Conclusão para o teste aplicado: De acordo com o teste t , não reijeitamos a hipótese de que o coeficiente possérico estimado é igual a zero , logo , concluímos que a correlação estimada não é estatisticamente significativa.

    Correlação Bisserial:

    Esse coeficiente é adequado se Fumante for dicotômica (com dois níveis, como “Sim” e “Não”). Ele mede a associação entre uma variável contínua (como IMC) e uma variável binária que se supõe representar uma divisão de uma variável latente normal subjacente. O coeficiente bisserial estima a correlação subjacente assumindo que a variável dicotômica resulta de uma “dichotomização” de uma distribuição normal.

    Code
    library(ltm)
    Carregando pacotes exigidos: MASS
    
    Anexando pacote: 'MASS'
    O seguinte objeto é mascarado por 'package:plotly':
    
        select
    O seguinte objeto é mascarado por 'package:dplyr':
    
        select
    Carregando pacotes exigidos: msm
    Code
    # Exemplo de dados para correlação bisserial
    # Suponha uma variável contínua Y e uma variável dicotômica X
    biserial_corr <- biserial.cor(dados$IMC, dados$Fumante)
    
    biserial_corr
    [1] 0.08211626
    Code
    # Extraia o valor de r_poly e o erro padrão
    
    # Extraia o valor de r_b
    r_b<- biserial_corr
    
    # Tamanho da amostra
    n <- length(dados$IMC)
    
    # Calcule o valor do teste t para r_b
    t_value <- r_b*sqrt((n - 2)/(1 - r_b^2))
    
    # Calcule o valor-p para o teste t
    p_value <- 2 * pt(-abs(t_value), df = n - 2)
    
    # Resultados
    cat("Correlação Biserial aproximada (r_ba):", r_b, "\n")
    Correlação Biserial aproximada (r_ba): 0.08211626 
    Code
    cat("Valor t:", t_value, "\n")
    Valor t: 1.002373 
    Code
    cat("Valor-p:", p_value, "\n")
    Valor-p: 0.3177997 

    Escolhido o nível de significância ,geralmente 5 % (0,05).

    1. Hípoteses do Teste :

      H0:rb=0

      H1:rb≠0

      Possíveis interpretações

    Se o valor p<0,05, rejeita-se H0 e conclui-se que o coeficiente de correlação bisserial estimado é estattísticamente significativo .

    Se o valor p>0,05 , NÃO rejeita-se H0 e conclui-se que o coeficiente de correlação bisserial estimado NÃO É estatísticamente significativo .

    Conclusão para o teste aplicado: De acordo com o teste t , não reijeitamos a hipótese de que o coeficiente possérico estimado é igual a zero , logo , concluímos que a correlação estimada não é estatisticamente significativa.

  2. A significância do coeficiente de correlação bisserial pode ser testada usando um teste t com o seguinte estatístico:

    $ t=\dfrac{r_b\sqrt{n-2}}{\sqrt{1-r_b^2}} $

onde rb é o coeficiente bisserial e $n$ é o tamanho da amostra. Esse teste segue uma distribuição t com n−2 graus de liberdade.

No R, você pode calcular a significância do coeficiente polyserial e verificar o valor-p.

Relação entre Variáveis Qualitativa e Qualitativa

Para investigar a relação entre duas variáveis qualitativas, podemos usar uma tabela de contingência entre as variáveis Fumante e Atividade_Física.

Code
# Tabela de contingência entre Fumar e Atividade Física
tabela_contingencia <- table(dados$Fumante, dados$Atividade_Fisica)
tabela_contingencia
     
      Alta Baixa Moderada
  Não   27    20       42
  Sim   18    23       20

Tabela de Contingência - Relação entre Fumar e Atividade Física

Interpretação:

A tabela de contingência fornece a contagem de fumantes e não fumantes dentro de cada nível de atividade física. A partir dessa tabela, podemos observar:

  • Atividade Física Alta: Parece ter uma proporção menor de fumantes comparado aos níveis de atividade física moderada e baixa.

  • Atividade Física Baixa: Apresenta uma maior proporção de fumantes em relação à atividade física alta.

Essas observações podem indicar uma possível associação entre fumar e o nível de atividade física. Indivíduos com alta atividade física tendem a fumar menos.

Podemos testar a associação entre essas variáveis com o teste do qui-quadrado.

Testando a hipótese de Associação e Pressuposições para o Teste Qui-Quadrado

Nesta seção, descrevemos as hipóteses e as pressuposições envolvidas no teste qui-quadrado, aplicado para investigar a associação entre as variáveis “Fumar” e “Atividade Física”.

Hipóteses do Teste Qui-Quadrado

O teste qui-quadrado é utilizado para verificar se há uma associação entre duas variáveis qualitativas. No caso deste estudo, estamos interessados em avaliar a relação entre ser fumante e o nível de atividade física.

  • Hipótese Nula (H₀): O hábito de fumar e atividade física são independentes, ou seja, a proporção de fumantes não difere entre os diferentes níveis de atividade física.

    [ H_0: \text{O hábito de fumar e Atividade Física são independentes, ou seja, o resultado de um não interfere no outro. ex.: chuva e notas no semestre .} ]
  • [ H_0: ]

  • Hipótese Alternativa (H₁): O hábiro de fumar e atividade física não são independentes, ou seja, a proporção de fumantes varia conforme o nível de atividade física.

    [ H_1: ]

Pressuposições do Teste Qui-Quadrado

O teste qui-quadrado possui algumas pressuposições importantes que devem ser verificadas para garantir a validade do teste. Essas pressuposições são as seguintes:

  1. Amostra Aleatória: A amostra de dados deve ser obtida por um processo de amostragem aleatória, garantindo que cada observação seja independente das outras.

  2. Tamanho da Amostra Adequado: As frequências esperadas em cada célula da tabela de contingência devem ser maiores ou iguais a 5. Caso contrário, o teste qui-quadrado pode não ser apropriado.

  3. Medida de Associação: O teste qui-quadrado mede a associação entre as variáveis, mas não indica a direção ou a magnitude dessa associação.

  4. Variáveis Categóricas: As variáveis analisadas devem ser qualitativas (categóricas), e a análise se dá por meio de uma tabela de contingência.

Interpretação dos Resultados

Após realizar o teste qui-quadrado, avaliamos o valor-p obtido:

  • Se o valor-p for menor que o nível de significância (geralmente 0,05), rejeitamos a hipótese nula, o que indica que existe uma associação significativa entre “Fumar” e “Atividade Física”.

  • Se o valor-p for maior ou igual a 0,05, não rejeitamos a hipótese nula, ou seja, não temos evidências suficientes para concluir que as variáveis são dependentes.

Essas hipóteses e pressuposições são essenciais para realizar o teste qui-quadrado de forma correta e interpretar seus resultados adequadamente.

Code
teste_qui <- chisq.test(tabela_contingencia) 
teste_qui

    Pearson's Chi-squared test

data:  tabela_contingencia
X-squared = 4.7548, df = 2, p-value = 0.09279
  • Conclusão: De acordo com o teste qui-quadrado,p maior 0,05, aceita a hipótese nula, não temos evidências suficientes para concluir que as variáveis são dependentes, ou seja, são independentes.
  

Teste Qui-Quadrado: O teste qui-quadrado pode confirmar se essa relação é estatisticamente significativa.

Relação entre Variáveis Quantitativas

Neste exemplo, apresentamos três tipos de relação linear: Correlação PositivaCorrelação Negativa e Ausência de Correlação. Abaixo, as figuras são exibidas lado a lado para facilitar a visualização.

Hipóteses e Pressuposições para a Correlação de Pearson

Nesta seção, descrevemos as hipóteses e pressuposições para a aplicação da correlação de Pearson, que é usada para medir a relação linear entre duas variáveis quantitativas. No exemplo, investigamos a relação entre as variáveis “Colesterol” e “Pressão Arterial”.

Hipóteses da Correlação de Pearson

A correlação de Pearson avalia a força e a direção da relação linear entre duas variáveis contínuas. Suas hipóteses são definidas da seguinte maneira:

  • Hipótese Nula (H₀): Não existe correlação linear entre as duas variáveis; o coeficiente de correlação populacional é igual a zero.

    [ H_0: = 0 ]

    Onde ( ) é o coeficiente de correlação populacional.

  • Hipótese Alternativa (H₁): Existe uma correlação linear entre as duas variáveis; o coeficiente de correlação populacional é diferente de zero.

    [ H_1: ]

Pressuposições da Correlação de Pearson

Para que a correlação de Pearson seja aplicada corretamente, as seguintes pressuposições devem ser atendidas:

  1. Linearidade: As duas variáveis devem apresentar uma relação linear. Isso pode ser verificado visualmente com um gráfico de dispersão. Se a relação entre as variáveis for não-linear, a correlação de Pearson não é adequada.

    Code
    ggplot(dados, aes(x = Colesterol, y = Pressão_Arterial)) +
      geom_point() +
      geom_smooth(method = "lm", col = "blue", se = FALSE) +
      labs(title = "Gráfico de Dispersão: Colesterol vs Pressão Arterial",
           x = "Colesterol",
           y = "Pressão Arterial") +
      theme_minimal()
    `geom_smooth()` using formula = 'y ~ x'

  2. Normalidade: As duas variáveis devem ser aproximadamente normalmente distribuídas, especialmente se o tamanho da amostra for pequeno. Essa pressuposição pode ser verificada através de testes de normalidade ou gráficos como o Q-Q plot.

    O teste de Shapiro-Wilk é usado para verificar a normalidade de uma distribuição, e ele testa as seguintes hipóteses:

    • Hipótese Nula (H₀): Os dados seguem uma distribuição normal.

    • Hipótese Alternativa (H₁): Os dados não seguem uma distribuição normal.

    Code
        # Q-Q plot
                    qqnorm(dados$Colesterol, main = "Q-Q Plot para Verificação de Normalidade")
                    qqline(dados$Colesterol, col = "red", lwd = 2)  # Adiciona a linha de referência

  3. Homocedasticidade: A variância dos valores ao longo da linha de regressão deve ser constante, ou seja, a dispersão dos pontos deve ser similar para todos os valores das variáveis. Caso contrário, pode haver heterocedasticidade, o que viola esta pressuposição.

    Code
     # Aplicando o teste de Bartlett
      bartlett.test(dados$Colesterol~dados$Atividade_Fisica)
    
        Bartlett test of homogeneity of variances
    
    data:  dados$Colesterol by dados$Atividade_Fisica
    Bartlett's K-squared = 1.0752, df = 2, p-value = 0.5842
  4. Escala de Medição: Ambas as variáveis devem ser medidas em uma escala intervalar ou de razão.

Cálculo e Interpretação da Correlação de Pearson

O coeficiente de correlação de Pearson (( r )) varia entre -1 e 1:

  • ( r = 1 ): Correlação linear perfeita positiva.

  • ( r = -1 ): Correlação linear perfeita negativa.

  • ( r = 0 ): Nenhuma correlação linear.

  • Se, tivermos valores entre -1 e 1, exceto o 0, as correlações mudam , mas existem.

Após calcular a correlação, o valor-p associado ao teste pode ser utilizado para verificar a significância estatística:

  • Se o valor-p for menor que o nível de significância (geralmente 0,05), rejeitamos a hipótese nula e concluímos que existe uma correlação linear significativa entre as duas variáveis.

  • Se o valor-p for maior ou igual a 0,05, não rejeitamos a hipótese nula, o que indica que não há evidências suficientes de uma correlação linear significativa entre as variáveis.

Interpretação dos Resultados

A magnitude e a direção da correlação são determinadas pelo valor de ( r ):

  • Correlação forte: Quando ( r ) está próximo de -1 ou 1, indicando uma forte relação linear.

  • Correlação fraca: Quando ( r ) está próximo de 0, indicando uma fraca ou inexistente relação linear.

  • Significado do sinal: Se ( r ) for positivo, a relação entre as variáveis é direta (aumento de uma variável corresponde ao aumento da outra). Se ( r ) for negativo, a relação é inversa (aumento de uma variável corresponde à diminuição da outra).

    Essas hipóteses e pressuposições são fundamentais para realizar a análise de correlação de Pearson corretamente e interpretar seus resultados de forma adequada.

Para fazer Correlação entre Colesterol e Pressão Arterial

Inicialmente, testa-se se encaixa as pressuposições, conforme já realizado acima, juntamente com a parte teórica de pressuposições.

Sendo assim, para variáveis quantitativas, como Colesterol e Pressão_Arterial, podemos calcular a correlação de Pearson para verificar a força e a direção da relação linear entre elas.

Code
# Correlação de Pearson entre Colesterol e Pressão Arterial
correlacao <- cor(dados$Colesterol, dados$Pressão_Arterial)
correlacao
[1] 0.0969154

Significa que a correlação é muito fraca ou inexistente, pois o r=0.0969154, concluindo que a correlação entre os níveis de pressão arterial e colesterol é fraca.

Para saber se a correlação é significativa, calcula-se o valor de p:

Code
cor.test(
  x = dados$Colesterol,
  y = dados$Pressão_Arterial,
  method= "pearson"
)

    Pearson's product-moment correlation

data:  dados$Colesterol and dados$Pressão_Arterial
t = 1.1846, df = 148, p-value = 0.2381
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.06434553  0.25324360
sample estimates:
      cor 
0.0969154 

O valor de p é maior que 0,05, logo não é significativo

Conclusão : De acordo com o teste de correlação, as variáveis Colesterol e Pressão arterial não estão correlacionadas significativamente, ao nível de 5% de significância

Matriz de correlaçao- Variáveis misturadas

Code
#str(dados) #serve para conferir a natureza das variáveis 
#Transformando todas as variáveis em numéricas.
dados$Idade<-as.numeric(dados$Idade)
dados$IMC<-as.numeric(dados$IMC)
dados$Atividade_Fisica<-as.numeric(dados$Atividade_Fisica)
dados$Fumante<-as.numeric(dados$Fumante)
dados$Colesterol<-as.numeric(dados$Colesterol)
dados$Pressão_Arterial<-as.numeric(dados$Pressão_Arterial)

library(psych)

Anexando pacote: 'psych'
O seguinte objeto é mascarado por 'package:ltm':

    factor.scores
O seguinte objeto é mascarado por 'package:polycor':

    polyserial
Os seguintes objetos são mascarados por 'package:ggplot2':

    %+%, alpha
Code
Mmixed<- mixedCor(data=dados, p=3, c=c(1,2,5,6),d=4,smooth = F, correct=0)
Code
Mmixed
Call: mixedCor(data = dados, c = c(1, 2, 5, 6), p = 3, d = 4, smooth = F, 
    correct = 0)
Warning in abbreviate(colnames(R), minlength = minlength): abbreaviate usado
com caracteres não-ASCII
                 Idade IMC   Atv_F Fumnt Clstr Prs_A
Idade             1.00                              
IMC               0.18  1.00                        
Atividade_Fisica -0.13 -0.04  1.00                  
Fumante           0.00 -0.10 -0.12  1.00            
Colesterol       -0.13 -0.08  0.13 -0.07  1.00      
Pressão_Arterial -0.03  0.04  0.12  0.00  0.10  1.00

Observações: Variáveis Poli, são variáveis categoricas com mais de dois níveis.

A função mixedCor requer que todas as variáveis sejam de natureza numérica (quantitativa)

Argumentos da função mixedCor:

p = é a posição da variável categioricas com mais de 2 níveis presentes no conjunto de dados;

c= posição variáveis contínuas no conjunto de dados;

d=posição variáveis categoricas com 2 níveis (dicotômica) presentes no conjunto de dados;

Code
Rho<-Mmixed[["rho"]] # considerando apenas os coeficientes de correlção (rho)
Rho<-round(Rho,2) #Considerar 2 casas após a vírgula
Rho<-as.data.frame(Rho) # Transformando o conjunto com os valores do coeficiente em "planilha"
Code
library(ggcorrplot)
Correlogram<-ggcorrplot(Rho, type = "upper",
                        lab = TRUE)
library(plotly)
Correlogram<-ggplotly(Correlogram)
Correlogram