Sunteți pe pagina 1din 9

PROIECT PROBABILITATI SI STATISTICA

DOCUMENTATIE

CONSTRUIREA UNUI PACHET R PENTRU LUCRU CU


VARIABILE ALEATOARE CONTINUE

Nume student Grupa


Chipesu Cipirian-Iulian 251
Chelu Fabian-George 251
Balasa Alexandra-Gabriela 251
Vaidos Mihai-Iulian 251
#1)Fiind dată o funcție f, introdusă de utilizator, determinarea unei constante de normalizare k. Ȋn cazul ȋn care o
asemenea constantă nu există, afișarea unui mesaj corespunzător către utilizator.

f <- function(x) {exp((-x**2))}

CNK <- function(f) { #constanta de normalizare K


tryCatch(
{
functiePD = integrate(f, -Inf, Inf)$value
return(1/functiePD)
}
,error = function(e)
{
stop("Aceasta constanta nu exista!")
}
)

I = CNK(f)
#2) Verificarea dacă o funcție introdusă de utilizator este densitate de probabilitate.
Deoarece nu am putut construi vectori cu un numar infinit de elemente, am verificat daca functia este pozitiva in
multimea (-500;500), cu pasul de 0.1, astfel am putut prin aproximatie sa vedem daca functia este pozitiva.

verifPozitiv <- function(f) {


for (val in seq(-500, 500, 0.1)) {
if (f(val) < 0) FALSE
}
TRUE
}
verifPozitiv(f)

probDens <- function(f) {


if(!verifPozitiv(f))
FALSE
if (round(integrate(Vectorize(f), -Inf, Inf)$value, 4) == 1)
TRUE
else
FALSE
}

#3) Crearea unui obiect de tip variabilă aleatoare continuă pornind de la o densitate de probabilitate introdusă de
utilizator. Funcția trebuie să aibă opțiunea pentru variabile aleatoare unidimensionale și respectiv bidimensionale.

Cu ajutorul functiei VAC, primim o functie care indeplineste criterile unei functii de densitate, iar daca acest
criteriu este indeplinit, setam clasa obiectului returnat “VAC”, continand atributul “pdf” acesta reprezentand
functia de distributie.
VAC <- function() { #variabila aleatorie continua
if(!probDens(functiePD))
stop("Functia nu este o densitate de probabilitate")
x = functiePD
attr(x,"pdf") = functiePD
class(x)="VAC"
return(x)
}
#4)
Reprezentarea grafică a densității și a funcției de repartiție pentru diferite valori ale
parametrilor repartiției. Ȋn cazul ȋn care funcția de repartiție nu este dată ȋntr-o formă
explicită(ex. repartiția normală) se acceptă reprezentarea grafică a unei aproximări a
acesteia.

grafVAC <- function(repartitie, parametru, functiePD1, functiePD2) {


domeniu = seq(functiePD1, functiePD2, 0.001)
if (length(parametru) == 0) {
plot(domeniu, repartitie(domeniu), functiePDlab="", ylab="")
} else if (length(parametru) == 1) {
plot(domeniu, repartitie(domeniu, parametru[1]), functiePDlab="", ylab="")
} else if (length(parametru) == 2) {
plot(domeniu, repartitie(domeniu, parametru[1], parametru[2]), functiePDlab="", ylab="")
} else if (length(parametru) == 3) {
plot(domeniu, repartitie(domeniu, parametru[1], parametru[2], parametru[3]), functiePDlab="", ylab="")
}
}
Pentru a rezolva acest subpunct ne-am ales functia grafVAc, avand parametrii :
- numele repartitiei ( repartitie)
- un vector ce contine parametrii repartitiei respective( parametru)
-capetele domeniului (fuctiePD1 si functiePD2)

#5) Calculul mediei, dispersiei și a momentelor inițiale și centrate pȃnă la ordinul 4(dacă
există). Atunci cȃnd unul dintre momente nu există, se va afișa un mesaj
corespunzător către utilizator.
medieFPD <- function(functiePD) { # intoarce valoare medie a distributiei
if(class(functiePD)!="VAC")
stop("functiePD nu este variabila aleatorie continua")
densFunctiePD <- attr(functiePD,"pdf")
integrate(Vectorize(function(functiePD){functiePD*densFunctiePD(functiePD)}), -Inf, Inf)$value
}

variatie<-function(functiePD) {
if(class(functiePD)!="VAC")
stop("functiePD nu este variabila aleatorie continua")
densFunctiePD <- attr(functiePD,"pdf")
var <- function(functiePD) {
(functiePD^2)*densFunctiePD(functiePD)
}
integrate(Vectorize(var), -Inf, Inf)$value - (medieFPD(functiePD)^2)
}

momentInit <- function(functiePD, k) {


if (k < 1 || k > 4) {
stop("k nu este corespunzator")
}
if (class(functiePD) != "VAC") {
stop("functiePD nu este variabila aleatorie continua")
}
tryCatch({
medieF(function(functiePD) {functiePD**k}, functiePD)
}, error = function(e) {
stop("Nu exista momentul de ordinul dat")
})
}

momentCentrat <- function(functiePD, k) {


if (k < 1 || k > 4) {
stop("k nu este corespunzator")
}
if (class(functiePD) != "VAC") {
stop("functiePD nu este variabila aleatorie continua")
}
E = medieFPD(functiePD)
tryCatch({
medieF(function(functiePD) {(functiePD-E)**k}, functiePD)
}, error = function(e) {
stop("Nu exista momentul de ordinul dat")
})
}

#6) Calculul mediei și dispersiei unei variabile aleatoare g(X), unde X are o repartiție
continuă cunoscută iar g este o funcție continuă precizată de utilizator.

medieF <- function(g, functiePD){ # intoarce valoarea medie a lui g(functiePD)


if(class(functiePD)!="VAC")
stop("functiePD nu este variabila aleatorie continua")
densFunctiePD <- attr(functiePD,"pdf")
integrate(Vectorize(function(functiePD){functiePD*g(densFunctiePD(functiePD))}), -Inf, Inf)$value
}

variatieG <- function(g,functiePD){


if(class(functiePD)!="VAC")
stop("functiePD nu este variabila aleatorie continua")
densFunctiePD <- attr(functiePD,"pdf")
var <- function(functiePD){
(functiePD^2)*g(densFunctiePD(functiePD))
}
integrate(Vectorize(var), -Inf, Inf)$value - (medieFPD(functiePD)^2)
}

#7) Crearea unei funcții P care permite calculul diferitelor tipuri de probabilități asociate
unei variabile aleatoare continue(similar funcției P din pachetul discreteRV)

probVar<-function(functiePD,a,b){
if(!class(functiePD)=="VAC")
stop("functiePD nu este variabila aleatorie continua")
densFunctiePD = attr(functiePD, "pdf")
integrate(Vectorize(densFunctiePD), a, b)
}
pentru a calcula aceasta probabiblitate, intergram functia de distributie de probabiblitati pe intervalul cautat (a,b)
#12)Construirea sumei și diferenței a două variabile aleatoare continue
independente(folosiți formula de convoluție)

sumaVAC = function(functiePD, Y) {
if(!class(functiePD)=="VAC")
stop("functiePD nu este variabila aleatorie continua")
if(!class(Y)=="VAC")
stop("Y nu este variabila aleatorie continua")
densFunctiePD = attr(functiePD, "pdf")
densY = attr(Y, "pdf")
densityOfZ = function(functiePD) {integrate(Vectorize(function(t) {densFunctiePD(functiePD-t) * densY(t)}),
-Inf, Inf)}
Z = VAC(densFunctiePD)
return(Z)
}

difVAC = function(functiePD, Y) {
if(!class(functiePD)=="VAC")
stop("functiePD nu este variabila aleatorie continua")
if(!class(Y)=="VAC")
stop("Y nu este variabila aleatorie continua")
densY = attr(Y, "pdf")
densNegY = function(functiePD) {densY(-functiePD)}
negY = VAC(densNegY)
return(sumaVAC(functiePD, negY))
}

#Aflam suma/diferenta celor doua variabile aleatoare continue (VAC) cu ajutorul functiei definite
sumaVAC/difVAC, verificand daca variabilele sunt aleatorii si continue
Pachete folosite si surse de inspiratie
 https://en.wikipedia.org/wiki/Normalizing_constant#Definition
 https://en.wikipedia.org/wiki/Variance#Absolutely_continuous_random_variable
 Instructions for Creating Your Own R Package| In Song Kim, Phil Martin, Nina McMurry, Andy
Halterman - March 18, 2018
 https://www.r-project.org/nosvn/pandoc/devtools.html
 https://en.wikipedia.org/wiki/Convolution_of_probability_distributions
 integrate function | R Documentation
 https://rstudio-pubs-static.s3.amazonaws.com/100906_8e3a32dd11c14b839468db756cee7400.html
 rpackage_instructions.pdf (mit.edu)

S-ar putea să vă placă și