Function ChiCuadradoTotal(Observado As Range, Estimado As Range) As Double
Se declaran las variables Observado y Estimado como rangos de celdas
al definir la funcin personalizada. Declaracin de variable Chi y matrices de frecuencias Est (estimadas o esperadas) y de la muestra. Dim chi As Double Dim FrecEst() As Double Dim FrecMuestra() As Double Comprobacin de seleccin correcta del rango de datos observados Por filas filasobservado = Observado.Rows.Count filasestimado = Estimado.Rows.Count If filasobservado <> filasestimado Then MsgBox Seleccin incorrecta End If Por columnas ColumObservado = Observado.Columns.Count ColumEstimado = Estimado.Columns.Count If ColumObservado <> ColumEstimado Then MsgBox Seleccin incorrecta End If Redimensin de matrices conocida su dimensin segn seleccin de datos hecha por usuario ReDim FrecEst(filasobservado) ReDim FrecMuestra(filasestimado) Inicializacin de las variables para contar cohortes o grupos de tamao 5 Dim grupo As Integer grupo = 0 ultima = 0 contador = 0 Declaracin de matrices de frecuencias depuradas Estimadas (esperados) y de muestra. Frecuencias que resultarn de reagrupar cohortes de tamao mnimo 5. Dim FrecEstDep() As Double Dim FrecMuestraDep() As Double Asignacin inicial de los valores de Excel a las matrices de frecuencia esperada (Estimada) y de la muestra (Observada). Esperados ne = 0 For Each x In Estimado ne = ne + 1 FrecEst(ne) = x.Value Next x Observados no = 0 For Each x In Observado no = no + 1 FrecMuestra(no) = x.Value Next x Agrupacin en grupos o cohortes de tamao mayor o igual a 5 Preparacin matriz de valores para posterior asignacin a la matriz de frecuencias de grupos o cohortes de tamao vlido. For i = 1 To filasobservado - 1 If FrecEst(i) < 5 Then FrecEst(i + 1) = FrecEst(i) + FrecEst(i + 1) FrecMuestra(i + 1) = FrecMuestra(i) + FrecMuestra(i + 1) FrecEst(i) = 0 FrecMuestra(i) = 0 Else grupo = grupo + 1 ultima = i End If Next i If FrecEst(filasobservado) < 5 Then FrecEst(ultima) = FrecEst(ultima) + FrecEst(filasobservado) FrecMuestra(ultima) = FrecMuestra(ultima) + FrecMuestra(filasobservado) FrecEst(filasobservado) = 0 FrecMuestra(filasobservado) = 0 Else grupo = grupo + 1 End If Control de tamao de la muestra inferior a 5, ningn grupo de 5. If grupo = 0 Then MsgBox No hay grupos de 5 o ms GoTo final End If Redimensin de las matrices de frecuencias depuradas, tras conocer el nmero de grupos/cohortes de tamao 5 o superior. ReDim FrecEstDep(grupo) ReDim FrecMuestraDep(grupo) Asignacin de valores de frecuencia a las matrices de frecuencia depuradas. For i = 1 To filasobservado If FrecEst(i) <> 0 Then contador = contador + 1 FrecEstDep(contador) = FrecEst(i) FrecMuestraDep(contador) = FrecMuestra(i) End If Next i Clculo del Chi-cuadrado Control de valores nulos en la matriz de frecuencias depuradas esperadas (Est) For j = 1 To grupo If FrecEstDep(j) = 0 Then GoTo final Else Sumando del sumatorio de chi-cuadrado. chi = chi + (FrecMuestraDep(j) - FrecEstDep(j)) ^ 2 / FrecEstDep(j) End If Next j Asignacin del valor del estadstico calculado a la funcin ChiCuadradoTotal. ChiCuadradoTotal = chi Inicializacin de las matrices de frecuencias Erase FrecEst() Erase FrecMuestra() Erase FrecEstDep() Erase FrecMuestraDep() final: End Function