Técnicas Cuantitativas 1 y R

Enlaces de Interés

Aquí tienes algunos enlaces interesantes relacionados con este documento.

Más enlaces interesantes

This is a free css template released by Sean Pollock for personal or commercial use. It was creating using a template from Zymic as a basis. It is licensed under the Creative Commons Attribution 2.5 Canada License. That pretty much means you can use it in any way you want, but you must have "attribution" to Sean Pollock, in the form of a link in your footer.


Introducción


En esta página web encontrarás funciones creadas en el entorno de programación R para abordar los contenidos de la asignatura de Técnicas Cuantitativas 1 de los grados que se imparten en la facultad de Ciencias Económicas y Empresariales de la Univerisdad de Granada. Más concretamente, se estudia estadísticas descrptiva, regresión por mínimos cuadrados, número índices, análisis descriptivo de series cronológicas y probabilidad.
Se ha creado una función para cado uno de los apartados anteriores, la cual serán explicadas por separado. Al mismo tiempo, se ha creado también un menú (descargar) que va a permitir introducir fácilmente los datos y obtener los correspondientes resultados. El manejo de este menú se ilustrará con material multimedia:


Estadística Descriptiva


Se ha creado una función, Descriptiva(), que permitirá calcular las principales características descriptivas de un conjunto de datos. A saber:


Código: Descriptiva.txt

Descriptiva <- function(datos, representacion=T, discreta="s") {
    n <- length(datos)
    minimo <- min(datos)
    maximo <- max(datos)
    rango <- maximo - minimo
    cuantil1 <- quantile(datos, probs=0.25, name=FALSE)
    cuantil2 <- quantile(datos, probs=0.5, name=FALSE)
    cuantil3 <- quantile(datos, probs=0.75, name=FALSE)
    recorrido <- cuantil3 - cuantil1
    coeficienteapertura <- maximo/minimo
    recorridosemi <- (cuantil3-cuantil1)/(cuantil3+cuantil1)
    mediaaritmetica <- mean(datos)
    mediageometrica <- exp(mean(log(datos)))
    mediaarmonica <- n/(sum(1/datos))
    recorridorelativo <- recorrido/mediaaritmetica
    varianza <- var(datos)
    desviaciontipica <- sqrt(var(datos))
    coeficientevariacion <- desviaciontipica/mediaaritmetica
    m3 = sum((datos-mediaaritmetica)^(3))/n
    asimetria <- m3/(desviaciontipica^(3))
    m4 = sum((datos-mediaaritmetica)^(4))/n
    curtosis <- (m4/(desviaciontipica^(4))) - 3
    datos <- sort(datos)
    u <- cumsum(datos)
    p <- array(0,c(1,n))
    q <- array(0,c(1,n))
    for (i in 1:n)
    {
      p[i] <- i/n
      q[i] <- u[i]/u[n]
    }
    indicegini <- 1 - ((sum(q[1:n-1]))/(sum(p[1:n-1])))
    if (representacion==T)
    {
    if (discreta=="s")
    {
        tab <- table(sort(datos))
        win.graph()
        barplot(tab, main="Diagrama de Barras", col="red")
        win.graph()
        pie(tab, main="Diagrama de Sectores")
            mod <- sort(table(datos), TRUE)
            moda <- mod[1]
    } else
    {       
        win.graph()
        boxplot(datos, main="Diagrama de Cajas", col="red")
        win.graph()
        hist(datos, main="Histograma", col="red")
            moda <- c()
    }
    }
    resultado <- list(minimo,
    maximo,
    rango,
    cuantil1,
    cuantil2,
    cuantil3,
    moda,
    recorrido,
    coeficienteapertura,
    recorridorelativo,
    recorridosemi,
        mediaaritmetica,
    mediageometrica,
    mediaarmonica,
    varianza,
    desviaciontipica,
    coeficientevariacion,
    asimetria,
    curtosis,
    indicegini)
    names(resultado) <- c("Mínimo",
    "Máximo",
    "Recorrido o rango",
    "Primer Cuantil",
        "Segundo Cuantil o Mediana",
    "Tercer Cuantil",
    "Moda",
    "Recorrido Intercuartílico",
    "Coeficiente de Apertura",
    "Recorrido Relativo",
    "Recorrido Semi-intercuartílico",
    "Media Aritmética",
    "Media Geométrica",
    "Media Armónica",
        "Varianza",
    "Desviación Típica",
    "Coeficiente de Variación",
    "Coeficiente de Asimetría",
    "Coeficiente de Curtosis",
    "Índice de Gini")
    resultado
}

Para probar el código anterior basta con escribir:

source("Descriptiva.txt")
# datos = sample(10,5000, replace=TRUE)
datos = c(5.75, 6.25, 4.5, 6, 7.75, 5, 5.75, 2.5, 6, 4.5, 4.5, 1, 1.5, 8.5, 7.25, 6, 4, 6.75, 3.25, 1, 7, 1, 6.75, 1, 1.25, 6.25, 6.75, 6.25, 4, 8.75, 3.5, 8.5, 7.25, 2.25, 2, 5.75, 1.5, 7.25, 6.25, 2, 8, 7, 6, 6.5, 1.75, 1, 5.5, 3.5, 4.75, 2.5, 5, 7.5, 3.75, 6.25, 5, 6.25, 4.5, 4.25, 3.5, 1.5, 7.5, 5.75, 2.25, 8, 1, 4.75, 4.25, 2.75, 4.75, 5, 6.5, 2, 1.5, 5, 4.25, 6.25, 3, 5.75)
Descriptiva(datos)


Inicio

Regresión por Mínimos Cuadrados


Se ha creado una función, Regresion(), que permita calcular la regresión por mínimos cuadrados de dos variables. Más concretamente se calculan las medias y varianzas de las dos variables, su covarianza y correlación, el coeficiente de determinación y las estimaciones de los coeficientes. También se presentan en una tabla los valores reales, estimados y los errores, y se representan los mismos.

Código: Regresion.txt

Regresion <- function(Y, X, representacion=TRUE) {
    mediaX <- mean(X)
    varianzaX <- var(X)
    mediaY <- mean(Y)
    varianzaY <- var(Y)
    covarianza <- cov(Y, X)
    pendiente <- covarianza/varianzaX
    independiente <- mediaY - pendiente*mediaX
    coeficientedeterminacion <- (covarianza^2)/(varianzaX*varianzaY)         correlacion <- sqrt(coeficientedeterminacion)
    estimacion <- independiente + pendiente * X
    errores <- Y - estimacion
    par <- cbind(X, Y, estimacion, errores)
    resultado <- list(mediaX,
        varianzaX,
        mediaY,
        varianzaY,
        covarianza,
        correlacion,
        coeficientedeterminacion,
        independiente,
        pendiente,
        par)
    names(resultado) <- c("Media variable independiente",
        "Varianza variable independiente",
        "Media variable dependiente",
        "Varianza variable dependiente",
        "Covarianza",
        "Correlación",
        "Coeficiente Determinacion",
        "Término Independiente",
        "Pendiente",
        "Valores reales, estimación y errores")
    #represento los puntos y la recta calculada
    if (representacion==TRUE) {
        plot(X, Y, type="o", col="blue", las=2, main="Representación de             datos reales (azul) y estimados (rojo)")
        abline(independiente, pendiente, lty=2, col="red")
        win.graph()
        plot(X, errores, type="b", col="red", main="Representación de los             errores (rojo)")
        abline(0, 0, lty=2)
    }
    resultado
}

Para probar el código anterior basta con escribir:

source("Regresion.txt")
Y = c(5.75, 6.25, 4.5, 6, 7.75, 5, 5.75, 2.5, 6, 4.5, 4.5, 1, 1.5, 8.5, 7.25, 6, 4, 6.75, 3.25, 1)
X = c(7, 1, 6.75, 1, 1.25, 6.25, 6.75, 6.25, 4, 8.75, 3.5, 8.5, 7.25, 2.25, 2, 5.75, 1.5, 7.25, 6.25, 2)
Z = c(8, 7, 6, 6.5, 1.75, 1, 5.5, 3.5, 4.75, 2.5, 5, 7.5, 3.75, 6.25, 5, 6.25, 4.5, 4.25, 3.5, 1.5)
W = c(7.5, 5.75, 2.25, 8, 1, 4.75, 4.25, 2.75, 4.75, 5, 6.5, 2, 1.5, 5, 4.25, 6.25, 3, 5.75, 5.5, 3.5)
Regresion(sort(Y), sort(X))
Regresion(sort(Z), sort(W))


Inicio

Números Índices


Se han creado 5 funciones que van a permitir:


Código: NumerosIndices.txt

SerieIndiceSimple <- function(SerieValores, ValorPeriodoBase) {    
    SerieIndice <- (SerieValores/ValorPeriodoBase)*100
    SerieIndice
}

EnlaceSeries <- function(SerieAntigua, SerieNueva) {
    longitud <- length(SerieAntigua)
    denominador <- SerieAntigua[longitud]
    NuevaSerieAntigua <- (SerieAntigua/denominador)*100
    SerieEnlazada <- c(NuevaSerieAntigua[1:(longitud-1)], SerieNueva)    
    SerieEnlazada
}

CambioBase <- function(SerieNumeroIndice, IndiceNuevaBase) {    
    NuevaSerieNumeroIndice <- (SerieNumeroIndice/IndiceNuevaBase)*100
    NuevaSerieNumeroIndice
}

Deflactacion <- function(PreciosActuales, Deflactor) {
    PreciosConstantes <- (PreciosActuales/Deflactor)*100
    PreciosConstantes
}

TMV <- function(valorinicial, valorfinal, periodo) {
    cociente <- valorfinal/valorinicial
    raiz <- cociente^(1/periodo)
    tmv <- raiz - 1 tmv
}

Para probar el código anterior basta con escribir:

source("NumerosIndices.txt")
Serie <- c(55, 63, 65, 72)
Serie1 <- c(121, 123, 126, 131, 135) 
Serie2 <- c(100, 103, 106, 109, 113, 117) 
Serie3 <- c(78, 85, 95, 100) 
SerieIndiceSimple(Serie, Serie[1])
EnlaceSeries(Serie1, Serie2)
CambioBase(Serie1, Serie1[3]) 
TMV(Serie[1], Serie[4], 3) 
Deflactacion(Serie, Serie3)


Inicio

Análisis descriptivo de Series Cronológicas


Se han creado las funciones siguientes para:

Código: SeriesCronologicas.txt

Par <- function(numero)
{
    modulo <- numero %% 2
    modulo
    # si modulo = 0, entonces numero es par
    # si modulo = 1, entonces numero es impar
}

MediasGrupos <- function(SerieTemporal, p)
{
    longitud <- length(SerieTemporal)
    grupo <- array(0,c(longitud-p+1,p))
    mediagrupo <- array(0,c(longitud-p+1,1))
    i <- 1
    k <- 1
    grupo[i,1:p] <- SerieTemporal[1:p]
    mediagrupo[i] <- mean(grupo[i,1:p])
    while (p+k <= longitud)
    {
        i <- i + 1
        grupo[i,1:p] <- SerieTemporal[(1+k):(p+k)]
        mediagrupo[i] <- mean(grupo[i,1:p])
        k <- k + 1
    }
    #grupo
    mediagrupo
}

TendenciaMediasMoviles <- function(SerieTemporal, p, representacion=TRUE)
{
    #represento la serie original por defecto
    if (representacion==TRUE)
    {
        win.graph()
        #postscript("SerieOriginal.eps", horizontal=FALSE, onefile=FALSE, height=8, width=6, pointsize=10)
        jpeg("SerieOriginal.jpg")
        plot(SerieTemporal, xlab="Tiempo", ylab="Serie Temporal", type="o")
        dev.off()
    }
    #calculo la serie suavizada y la centro
    Medias <- MediasGrupos(SerieTemporal, p)
    SerieSuavizada <- array(NA,c(1,length(SerieTemporal)))
    centrada <- Par(p)
    if (centrada == 1)    
    {
        k <- (p+1)/2
        for (i in 1:length(Medias))
        {
            SerieSuavizada[k] <- Medias[i]
            k <- k + 1
        }
    }
    else
    {
        Medias <- MediasGrupos(Medias, 2)
        k <- ((p+1)/2+0.5)
        for (i in 1:length(Medias))
        {
            SerieSuavizada[k] <- Medias[i]
            k <- k + 1
        }
    }
    #represento la serie original y suavizada de forma conjunta
    if (representacion==TRUE)
    {
        win.graph()
        #postscript("SerieOriginalSuavizada.eps", horizontal=FALSE, onefile=FALSE, height=8, width=6, pointsize=10)
        jpeg("SerieOriginalSuavizada.jpg")
        plot(SerieTemporal, type="n")
        Series <- ts(matrix(c(SerieTemporal, SerieSuavizada), length(SerieTemporal), 2))
        plot(Series, plot.type="single", xlab="Tiempo", ylab="Serie Temporal Original y Suavizada", lty=1:2, col=1:2)
        dev.off()
        graphics.off()
    }
    #devuelvo la serie suavizada
    SerieSuavizada
}

TendenciaRegresion <- function(SerieTemporal, Tiempos,  representacion=TRUE)
{
    mediaSerieTemporal <- mean(SerieTemporal)
    varianzaSerieTemporal <- var(SerieTemporal)
    mediaTiempos <- mean(Tiempos)
    varianzaTiempos <- var(Tiempos)
    covarianza <- cov(SerieTemporal, Tiempos)
    pendiente <- covarianza/varianzaTiempos
    independiente <- mediaSerieTemporal - pendiente*mediaTiempos
    coeficientedeterminacion <- (covarianza^2)/(varianzaSerieTemporal*varianzaTiempos)
    informe <- c(mediaSerieTemporal, varianzaSerieTemporal, mediaTiempos, varianzaTiempos, covarianza, coeficientedeterminacion, independiente, pendiente)
    names(informe) <- c("Media Serie Temporal", "Varianza Serie Temporal", "Media Tiempos", "Varianza Tiempos", "Covarianza", "Coeficiente Determinacion", "Término Independiente", "Pendiente")
    #represento los puntos y la recta calculada
    if (representacion==TRUE)
    {
        #postscript("SerieOriginalRecta.eps", horizontal=FALSE, onefile=FALSE, height=8, width=6, pointsize=10)
        jpeg("SerieOriginalRecta.jpg")
        plot(Tiempos, SerieTemporal, type="o", las=2)
        abline(independiente, pendiente, lty=2, col=2)
        dev.off()
    }
    #salida
    informe
}

Media <- function(vector)
{
    longitud <- length(vector)
    media <- 0
    total <- 0
    for (i in 1:longitud)
    {
        if (is.na(vector[i]) == FALSE)
        {
            media <- vector[i] + media
            total <- total + 1
        }
    }
    media <- media/total
    media
}

EstacionalMediasMoviles <- function(SerieTemporal, p, representacion=TRUE)
{
    SerieSuavizada <- TendenciaMediasMoviles(SerieTemporal, p, FALSE)
    Serie1 <- SerieTemporal/SerieSuavizada
    Serie2 <- matrix(Serie1, ncol=p, byrow=T)
    M <- array(0, c(1, p))
    for (i in 1:p)
    {
        M[i] <- Media(Serie2[,i])
    }
    MA <- mean(M)
    IVE <- array(0, c(1, p))
    for (i in 1:p)
    {
        IVE[i] <- M[i]/MA
    }
    dimensiones <- dim(Serie2)
    SerieDesestacionalizada <- matrix(0, nrow=dimensiones[1], ncol=dimensiones[2])
    Serie3 <- matrix(SerieTemporal, ncol=p, byrow=T)
    for (i in 1:p)
    {
        SerieDesestacionalizada[,i] <- Serie3[,i]/IVE[i]
    }
    # represento serie original y desestacionalizada
    if (representacion==TRUE)
    {
        SerieDesestacionalizada0 <- as.vector(t(SerieDesestacionalizada))
        Series <- ts(matrix(c(SerieTemporal, SerieDesestacionalizada0), length(SerieTemporal), 2))
        #postscript("SerieOriginalDesestacionalizada.eps", horizontal=FALSE, onefile=FALSE, height=8, width=6, pointsize=10)
        jpeg("SerieOriginalDesestacionalizada.jpg")
        plot(Series, plot.type="single", lty=1:2, col=1:2)
        dev.off()
    }
    # salida
    salida <- list(IVE, SerieDesestacionalizada)
    names(salida) <- c("Índices Variación Estacional", "Serie Desestacionalizada")
    salida
}

RegresionT <- function(Y, X)
{
    mediaX <- mean(X)
    varianzaX <- var(X)
    mediaY <- mean(Y)
    varianzaY <- var(Y)
    covarianza <- cov(Y,X)
    pendiente <- covarianza/varianzaX
    independiente <- mediaY - pendiente*mediaX
    coeficientedeterminacion <- (covarianza^2)/(varianzaX*varianzaY)
    informe <- c(independiente, pendiente, mediaX, varianzaX, mediaY, varianzaY, covarianza, coeficientedeterminacion)
    informe
}

EstacionalRegresion <- function(SerieTemporal, Tiempos, p, representacion=TRUE)
{
    Serie1 <- matrix(SerieTemporal, ncol=p, byrow=T)
    dimensiones <- length(Tiempos)
    MediasAnuales <- array(0, c(1, dimensiones))
    for (i in 1:dimensiones)
    {
        MediasAnuales[i] <- mean(Serie1[i,])
    }
    b <- RegresionT(as.vector(MediasAnuales), Tiempos)
    M <- array(0, c(1, p))
    MM <- array(0, c(1, p))
    for (i in 1:p)
    {
        M[i] <- mean(Serie1[,i])
        resto <- b[2]*(i-1)
        MM[i] <- M[i] - resto/p
    }
    MA <- mean(MM)
    IVE <- array(0, c(1, p))
    for (i in 1:p)
    {
        IVE[i] <- MM[i]/MA
    }
    dimensiones <- dim(Serie1)
    SerieDesestacionalizada <- matrix(0, nrow=dimensiones[1], ncol=dimensiones[2])
    for (i in 1:p)
    {
        SerieDesestacionalizada[,i] <- Serie1[,i]/IVE[i]
    }
    # represento serie original y desestacionalizada
    if (representacion==TRUE)
    {
        SerieDesestacionalizada0 <- as.vector(t(SerieDesestacionalizada))
        Series <- ts(matrix(c(SerieTemporal, SerieDesestacionalizada0), length(SerieTemporal), 2))
        jpeg("SerieOriginalDesestacionalizada.jpg")
        plot(Series, plot.type="single", lty=1:2, col=1:2)
        dev.off()
    }
    # salida
    salida <- list(IVE, SerieDesestacionalizada)
    names(salida) <- c("Índices Variación Estacional", "Serie Desestacionalizada")
    salida
Para probar el código anterior basta con escribir:

source("SeriesCronologicas.txt") 
datos <- c(82, 70, 49, 76, 99, 111, 101, 133, 115, 121, 93, 123) 
anos1 <- c(2001, 2002, 2003) 
anos2 <-  c(2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012)
TendenciaMediasMoviles(datos,4) 
TendenciaRegresion(datos,anos2) 
EstacionalMediasMoviles(datos, 4) 
EstacionalRegresion(datos,anos1,4)


Inicio

Probabilidad


En este caso, para la introducción al cálculo de probabilidades se han creado funciones para aplicar el teorema de la probabilidad total, ProbabilidadTotal(), y el teorema de Bayes, TeoremaBayes(). También se han creado tres funciones que controlan los datos introducidos.

Código: Probabilidad.txt

Depuracion1 <- function(datos)
{
    parar <- 0
    if (is.numeric(datos) == TRUE)
    {
        longitud <- length(datos)
        for (i in 1:longitud)
        {
            if ((datos[i]<0) || (datos[i]>1))
            {
                cat("Los datos introducidos no son probabilidades\n")
                parar <- 1
            }
        }
    }
    else
    {
        cat("Los datos introducidos no son numéricos\n")
        parar <- 1
    }
    parar
}

Depuracion2 <- function(datos)
{
    parar <- 0
    if (sum(datos) != 1)
    {
        cat("Las probabilidades de los sucesos incompatibles y exhaustivos no suman uno\n")
        parar <- 1
    }
    parar
}

Depuracion3 <- function(datos1, datos2)
{
    parar <- 0
    longitud1 <- length(datos1)
    longitud2 <- length(datos2)
    if (longitud1 != longitud2)
    {
        cat("Los vectores de las probabilidades introducidas no tienen la misma longitud\n")
        parar <- 1
    }
    parar
}

ProbabilidadTotal <- function(probabilidadessucesos, probabilidadescondicionadassucesos)
{
    # adviértase que la posición i del segundo vector es la probabilidad condicionada asociada a la posición i del primer vector
    datos <- c(probabilidadessucesos, probabilidadescondicionadassucesos)
    if (Depuracion1(datos) == 0)
    {
        if (Depuracion3(probabilidadessucesos, probabilidadescondicionadassucesos) == 0)
        {
            if(Depuracion2(probabilidadessucesos) == 0)
            {
                probabilidadtotal <- 0
                longitud <- length(probabilidadessucesos)
                for (i in 1:longitud)
                {
                    probabilidadtotal <- probabilidadessucesos[i]*probabilidadescondicionadassucesos[i] + probabilidadtotal
                }
                probabilidadtotal
            }
            else probabilidadtotal = -1
        }
        else probabilidadtotal = -1
    }
    else probabilidadtotal = -1
   
}

TeoremaBayes <- function(probabilidadcondicionadanumerador, probabilidadnumerador, probabilidaddenominador, probabilidadtotal = FALSE, probabilidadessucesos, probabilidadescondicionadassucesos)
{
    if (probabilidadtotal == TRUE)
    {
        probabilidaddenominador<-ProbabilidadTotal(probabilidadessucesos, probabilidadescondicionadassucesos)
    }
    if (probabilidaddenominador != -1)
    {
        datos <- c(probabilidadcondicionadanumerador, probabilidadnumerador, probabilidaddenominador)
        if (Depuracion1(datos) == 0)
        {
            teoremabayes <- (probabilidadcondicionadanumerador*probabilidadnumerador)/
probabilidaddenominador
        }
        if (probabilidadtotal == TRUE)
        {
            salida <- c(probabilidaddenominador, teoremabayes)
            names(salida) <- c("Probabilidad Total", "Teorema Bayes")
            salida
        }
        else teoremabayes
    }

Para probar el código anterior basta con escribir:

source("Probabilidad.txt")
sucesos <- c(0.037, 0.963)
condicionadas <- c(0.64,0.9)
ProbabilidadTotal(sucesos, condicionadas)
condicionada <- 0.64
numerador <- 0.037
denominador <- 0.89038
TeoremaBayes(condicionada, numerador, denominador)
TeoremaBayes(condicionada, numerador, , T, sucesos, condicionadas)

 
Inicio

Variable Aleatoria


En el caso de variable aleatoria se han creado funciones para calcular y representar la distribución de probabilidad y función de distribución:

Así como el cálculo de los momentos centrados y no centrados:

Código: VariableAleatoria.txt

RepresentacionDistribucionProbabilidadDiscreta <- function(valores, probabilidades)
{
    win.graph()
    jpeg("FuncionDeCuantia.jpg")
    plot(valores, probabilidades, xlab="Valores de la variable", ylab="Probabilidades", type="o")
    dev.off()
    graphics.off()
}

FuncionDistribucionDiscreta <- function(valores, probabilidades, representacion=TRUE)
{
    longitud <- length(valores)
    cat("Si x < ", valores[1],", F(x) = ", 0, "\n")
    total = 0
    for (i in 1:(longitud-1))
    {
        total = probabilidades[i] + total
        cat("Si ", valores[i], " <= x < ", valores[i+1],", F(x) = ", total, "\n")
    }
    cat("Si ", valores[longitud]," <= x, F(x) = ", 1, "\n")
    if (representacion)
    {
        win.graph()
        jpeg("FuncionDistribucionDiscreta.jpg")
        ejey <- seq(0,1,length.out=longitud+2)
        ejex <- c(valores[1]-1, valores, valores[longitud]+1)
        plot(ejex, ejey, xlab="Valores de la variable", ylab="Probabilidades", type="n")
        lines(c(valores[1]-1,valores[1]),c(0,0), type="l")
        total = 0
        for (i in 1:(longitud-1))
        {
            total = probabilidades[i] + total
            lines(c(valores[i],valores[i+1]),c(total,total), type="l")
        }
        lines(c(valores[i+1],valores[i+1]+1),c(1,1), type="l")
        dev.off()
        graphics.off()
    }
}

MomentosNoCentradosDiscretos <- function(valores, probabilidades, orden)
{
    potencias <- valores^(orden)
    alfa <- sum(potencias*probabilidades)
    alfa
}

MomentosCentradosDiscretos <- function(valores, probabilidades, orden)
{
    media <- MomentosNoCentradosDiscretos(valores, probabilidades, 1)
    potencias <- (valores-media)^(orden)
    mu <- sum(potencias*probabilidades)
    mu
}

RepresentarDistribucionContinua <- function(f, min, max, incremento = 0.05)
{
    ejex <- seq(min, max, incremento)
    longitud <- length(ejex)
    ejey <- array(0, c(1,longitud))
    for (i in 1:longitud)
    {
        ejey[i] <- f(ejex[i])
    }
    win.graph()
    jpeg("FuncionDeDensidad.jpg")
     plot(ejex, ejey, main="Representación función de densidad", xlab="Valores de X", ylab="Función densidad", type="h")
    dev.off()
    graphics.off()
}

IntegrarFuncion <- function(f, min, max, incremento = 0.00001)
{
    if (min == -Inf) {min <- -1}
    if (max == Inf) {max <- 6}
    base <- seq(min, max, incremento)
    longitud <- length(base)
    altura <- array(0, c(1,longitud))
    integral <- array(0, c(1,longitud))
    for (i in 1:longitud)
    {
        altura[i] <- f(base[i])
        integral[i] <- incremento*altura[i]
    }
    suma <- sum(integral)
    integral <- signif(suma, digits=3)
    integral
}

MomentosNoCentradosContinuos <- function(f, min, max, orden, incremento = 0.00001)
{
    if (min == -Inf) {min <- -1}
    if (max == Inf) {max <- 6}
    base <- seq(min, max, incremento)
    longitud <- length(base)
    altura <- array(0, c(1,longitud))
    integral <- array(0, c(1,longitud))
    for (i in 1:longitud)
    {
        altura[i] <- (base[i])^(orden)*f(base[i])
        integral[i] <- incremento*altura[i]
    }
    suma <- sum(integral)
    integral <- signif(suma, digits=3)
    integral
}

MomentosCentradosContinuos <- function(f, min, max, orden, incremento = 0.00001)
{
    if (min == -Inf) {min <- -1}
    if (max == Inf) {max <- 6}
    media <- MomentosNoCentradosContinuos(f, min, max, 1)
    base <- seq(min, max, incremento)
    longitud <- length(base)
    altura <- array(0, c(1,longitud))
    integral <- array(0, c(1,longitud))
    for (i in 1:longitud)
    {
        altura[i] <- (base[i]-media)^(orden)*f(base[i])
        integral[i] <- incremento*altura[i]
    }
    suma <- sum(integral)
    integral <- signif(suma, digits=3)
    integral
}
 

Para probar el código anterior basta con escribir:

source("VariableAleatoria.txt")
valores <- c(0,1,2)
probabilidades <- c(0.25, 0.5, 0.25)
FuncionDistribucionDiscreta(valores, probabilidades)
MomentosNoCentradosDiscretos(valores, probabilidades, 1)
MomentosCentradosDiscretos(valores, probabilidades, 2)
MomentosNoCentradosDiscretos(valores, probabilidades, 3)
MomentosCentradosDiscretos(valores, probabilidades, 3)
RepresentacionDistribucionProbabilidadDiscreta(valores, probabilidades)

FuncionDensidad <- function(x)
{
    if ((0 <= x) & (x <= 1))
    {
        2*x
    }
    else 0
}
RepresentarDistribucionContinua(FuncionDensidad, -1, 2)
IntegrarFuncion(FuncionDensidad, -Inf, Inf)
MomentosNoCentradosContinuos(FuncionDensidad, -Inf, Inf, 1)
MomentosCentradosContinuos(FuncionDensidad, -Inf, Inf, 2)
MomentosNoCentradosContinuos(FuncionDensidad, -Inf, Inf, 3)
MomentosCentradosContinuos(FuncionDensidad, -Inf, Inf, 3)
 
Inicio
Formato Contenido Enlace
Multimedia Descargar e instalar R .../softlibre/r1_es.html
Texto Función sobre Estadística Descriptiva Descriptiva.txt
Texto Función sobre regresión por Mínimos Cuadrados Regresion.txt
Texto Funciones sobre Números Índices NumerosIndices.txt
Texto Funciones sobre análisis descriptivo de Series Cronológicas SeriesCronologicas.txt
Texto Funciones sobre Probabilidad Probabilidad.txt
Texto Funciones sobre Variable Aleatoria VariableAleatoria.txt
Multimedia Video sobre Estadística Descriptiva Estadística Descriptiva
Multimedia Video sobre regresión por Mínimos Cuadrados Regresión
Multimedia Video sobre Números Índices Números Índices
Multimedia Video sobre análisis descriptivo de Series Cronológicas Series Cronológicas
Multimedia Video sobre Probabilidad Probabilidad
Multimedia Video sobre Variable Aleatoria Variable Aleatoria