تمرین هفتم درس R
دسترسی سریع
Geom
به مثال زیر برای تابع هندسی است توجه کنید :Examples
qgeom((1:9)/10, prob = .2)
[1] 0 0 1 2 3 4 5 7 10
Ni <- rgeom(20, prob = 1/4); table(factor(Ni, 0:max(Ni)))
0 1 2 3 4 5 6 7 8 9
8 2 2 2 2 1 1 1 0 1
تابع فوق هندسی - دستور زیر توزیع تابع فوق هندسی رابررسی می کند:Hyper
به مثال زیر برای تابع فوق هندسی است توجه کنید :Examples
m <- 10; n <- 7; k <- 8
x <- 0:(k+1)
rbind(phyper(x, m, n, k), dhyper(x, m, n, k))
all(phyper(x, m, n, k) == cumsum(dhyper(x, m, n, k))) # FALSE
## but error is very small:
signif(phyper(x, m, n, k) - cumsum(dhyper(x, m, n, k)), digits = 3)
تابع لجستیک - دستور زیر توزیع تابع لجستیک رابررسی می کند:Logis
به مثال زیر برای تابع لجستیک است توجه کنیدExamples
var(rlogis(4000, 0, scale = 5)) # approximately (+/- 3)
pi^2/3 * 5^2
تابع نرمالlog- دستور زیر توزیع تابع نرمال log رابررسی می کند:Lnorm
به مثال زیر برای تابع نرمالlog است توجه کنیدExamples
(x1 <- cbind(1, 1:10))
norm(x1)
norm(x1, “I”)
norm(x1, “M”)
stopifnot(all.equal(norm(x1, “F”),
sqrt(sum(x1^2))))
hilbert <- function(n) { i <- 1:n; 1 / outer(i – 1, i, “+”) }
h9 <- hilbert(9)
## all 5 types of norm:
(nTyp <- eval(formals(base::norm)$type))
sapply(nTyp, norm, x = h9)
تابع دو جمله ای منغی - دستور زیر توزیع تابع دو جمله ای منفی رابررسی می کند:Nbinom
به مثال زیر برای تابع دوجمله ای منفی است توجه کنیدExamples
require(graphics)
# Compute P(45 < X < 55) for X Binomial(100,0.5)
sum(dbinom(46:54, 100, 0.5))
## Using "log = TRUE" for an extended range :
n <- 2000
k <- seq(0, n, by = 20)
plot (k, dbinom(k, n, pi/10, log = TRUE), type = "l", ylab = "log density",
main = "dbinom(*, log=TRUE) is better than log(dbinom(*))")
lines(k, log(dbinom(k, n, pi/10)), col = "red", lwd = 2)
## extreme points are omitted since dbinom gives 0.
mtext("dbinom(k, log=TRUE)", adj = 0)
mtext("extended range", adj = 0, line = -1, font = 4)
mtext("log(dbinom(k))", col = "red", adj = 1)
محاسبه احتمال مقادیر در توزیع فراوانی ها توزیع فراوانی هر متغیرتصادفی نشان می دهد که پراکندگی مقادیر آن متغیر تصادفی چگونه است . برای محاسبه احتمال وقوع یک متغیر تصادفی دارای توزیع خاص ، توابع گوناگونی در نرم افزار R وجود دارد . مقادیر این احتمالات معمولا در تجزیه های آماری مورد نیاز هستند و در پایان کتب آماری به صورت جداول که مورد استفاده فراوان قرار می گیرند ، جداول Z،T، X^2 و F می باشند . توزیع نرمال فرض کنید فراوانی نمرات پایان ترم در آزمون یکی از دروس دارای توزیع نرمال باشد پنانپه میانگین دانشجویان برابر با 72 و انحراف معیار کلاس 2/15 باشد و بخواهیم درصد دانشجویانی که نمره بیش از 84 کسب نموده اند را محاسبه کنیم باید از تابع pnorm() توزیع Z به صورت زیر استفاده نماییم .> pnorm(84,mean=72,sd=15.2,lower.tail=FALSE)
[1] 0.2149176
همانگونه که مشاهده می شود حدود 5/21 درصد دانشجویان کلاس نمراتی بیش از 84 کسب نموده اند . برهان lower.tail=FALSE به برنامه می گوید تا احتمال مقادیر بیش از 84 را محاسبه نمایید . اگر این برهان برابر TRUE شود احتمال مقادیر کوچکتر و مساوی 84 را محاسبه خواهد نمود . از توابع دیگر مجموعه توابع نرمال می توان به dnorm() (محاسبه چندک برای احتمالات خاص ) Qnorm() (ایجاد تابع چندکی ) ، rnorm() (ایجاد داده های نرمال تصادفی ) اشاره نمود . به عنوان مثال چنانچه بخواهیم 30 عدد تصادفی که از یک توزیع نرمال با میانگین 17 و انحراف معیار 3 استخراج شده باشند به دست آورید از تابع rnorm() به صورت زیر استفاده می نمایید :> rnorm(30,mean=17,sd=3)
[1] 17.460853 15.083290 19.179011 15.886316 25.164220 19.188159 14.817927
[8] 17.193516 16.317907 22.447368 19.077821 14.528341 17.389222 14.649513
[15] 21.529489 19.409211 20.729602 15.585371 19.445909 17.016549 9.041588
[22] 14.774410 14.370598 16.132691 19.803648 16.077984 22.278385 12.827155
[29] 17.640852 16.770788
تابع نرمال - دستور زیر توزیع تابع نرمال رابررسی می کند:Norm
به مثال زیر برای تابع نرمال است توجه کنیدExamples
(x1 <- cbind(1, 1:10))
norm(x1)
norm(x1, "I")
norm(x1, "M")
stopifnot(all.equal(norm(x1, "F"),
sqrt(sum(x1^2))))
hilbert <- function(n) { i <- 1:n; 1 / outer(i - 1, i, "+") }
h9 <- hilbert(9)
## all 5 types of norm:
(nTyp <- eval(formals(base::norm)$type))
sapply(nTyp, norm, x = h9)
تابع پواسون- دستور زیر توزیع تابع پواسون رابررسی می کند:Pois
به مثال زیر برای تابع پواسون است توجه کنیدExamples
require(graphics)
-log(dpois(0:7, lambda = 1) * gamma(1+ 0:7)) # == 1
Ni <- rpois(50, lambda = 4); table(factor(Ni, 0:max(Ni)))
1 - ppois(10*(15:25), lambda = 100) # becomes 0 (cancellation)
ppois(10*(15:25), lambda = 100, lower.tail = FALSE) # no cancellation
par(mfrow = c(2, 1))
x <- seq(-0.01, 5, 0.01)
plot(x, ppois(x, 1), type = "s", ylab = "F(x)", main = "Poisson(1) CDF")
plot(x, pbinom(x, 100, 0.01), type = "s", ylab = "F(x)",
main = "Binomial(100, 0.01) CDF")
آزمون t برای انجام مقایسه آماری بین میانگین دو گروه از آزمون t استفاده می شود . بسته به نوع مطالعه و استنباط های لازم آزمون t به صورت یک نمونه ای و یا دو نمونه ای صورت می گیرد . در انواع یک نمونه ای آزمون t نشان می دهد که آیا بین میانگین نمونه و یک مقدار فرضی تفاوت معنی دار وجود دارد یا خیر ؟ برای انجام انواع آزمون t در نرم افزار R از تابع t.test() وبرهان هایش استفاده می شود . برهان های این تابع به کاربر امکان می دهد که آزمون های t با فرضیات و شرایط گوناگون را اجرا برساند . تابعt-student- دستور زیر توزیع تابع t-student رابررسی می کند: t به مثال زیر برای تابع t است توجه کنیدExamples
a <- matrix(1:30, 5, 6)ta <- t(a) ##-- i.e., a[i, j] == ta[j, i] for all i,j :for(j in seq(ncol(a))) if(! all(a[, j] == ta[j, ])) stop("wrong transpose")
weibullExamples
x <- c(0, rlnorm(50))
all.equal(dweibull(x, shape = 1), dexp(x))
all.equal(pweibull(x, shape = 1, scale = pi), pexp(x, rate = 1/pi))
## Cumulative hazard H():
all.equal(pweibull(x, 2.5, pi, lower.tail = FALSE, log.p = TRUE),
-(x/pi)^2.5, tolerance = 1e-15)
all.equal(qweibull(x/11, shape = 1, scale = pi), qexp(x/11, rate = 1/pi))
تابع یکنواخت- دستور زیر توزیع تابع یکنواخت رابررسی می کند: Unif به مثال زیر برای تابع یکنواخت است توجه کنیدExamples
u <- runif(20)
## The following relations always hold :
punif(u) == u
dunif(u) == 1
var(runif(10000)) #- ~ = 1/12 = .08333
تابع ویلکاکسون - دستور زیر توزیع تابع ویلکاکسون رابررسی می کند:Wilcoxon
به مثال زیر برای تابع ویلکاکسون است توجه کنیدExamples
require(graphics)
x <- -1L4*6 + 1)
fx <- dwilcox(x, 4, 6)
Fx <- pwilcox(x, 4, 6)
layout(rbind(1,2), widths = 1, heights = c(3,2))
plot(x, fx, type = “h”, col = “violet”,
main = “Probabilities (density) of Wilcoxon-Statist.(n=6, m=4)”)
plot(x, Fx, type = “s”, col = “blue”,
main = “Distribution of Wilcoxon-Statist.(n=6, m=4)”)
abline(h = 0:1, col = “gray20”, lty = 2)
layout(1) # set back
N <- 200
hist(U <- rwilcox(N, m = 4,n = 6), breaks = 0:25 – 1/2,
border = “red”, col = “pink”, sub = paste(“N =”,N))
mtext(“N * f(x), f() = true \”density\””, side = 3, col = “blue”)
lines(x, N*fx, type = “h”, col = “blue”, lwd = 2)
points(x, N*fx, cex = 2)
## Better is a Quantile-Quantile Plot
qqplot(U, qw <- qwilcox((1:N – 1/2)/N, m = 4, n = 6),
main = paste(“Q-Q-Plot of empirical and theoretical quantiles”,
“Wilcoxon Statistic, (m=4, n=6)”, sep = “\n”))
n <- as.numeric(names(print(tU <- table(U))))
text(n+.2, n+.5, labels = tU, col = “red”)
با استفاده از تابع density() می توان تابع چگالی یک مجموعه داده را به دست آورد . برای رسم نمودار تابع چگالی احتمال نیز از تابع plot() برای خروجی density() استفاده می کنیم :
density(VADeaths)
Call:
density.default(x = VADeaths)
Data: VADeaths (20 obs.); Bandwidth 'bw' = 9.64
x y
Min. :-20.520 Min. :2.748e-05
1st Qu.: 9.615 1st Qu.:1.690e-03
Median : 39.750 Median :7.787e-03
Mean : 39.750 Mean :8.286e-03
3rd Qu.: 69.885 3rd Qu.:1.333e-02
Max. :100.020 Max. :2.063e-02
به مثال زیر برای Density است توجه کنیدExamples
require(graphics)
plot(density(c(-20, rep(0,98), 20)), xlim = c(-4, 4)) # IQR = 0
# The Old Faithful geyser data
d <- density(faithful$eruptions, bw = "sj")
d
plot(d)
plot(d, type = "n")
polygon(d, col = "wheat")
## Missing values:
x <- xx <- faithful$eruptions
x[i.out <- sample(length(x), 10)] <- NA
doR <- density(x, bw = 0.15, na.rm = TRUE)
lines(doR, col = "blue")
points(xx[i.out], rep(0.01, 10))
## Weighted observations:
fe <- sort(faithful$eruptions) # has quite a few non-unique values
## use 'counts / n' as weights:
dw <- density(unique(fe), weights = table(fe)/length(fe), bw = d$bw)
utils::str(dw) ## smaller n: only 126, but identical estimate:
stopifnot(all.equal(d[1:3], dw[1:3]))
## simulation from a density() fit:
# a kernel density fit is an equally-weighted mixture.
fit <- density(xx)
N <- 1e6
x.new <- rnorm(N, sample(xx, size = N, replace = TRUE), fit$bw)
plot(fit)
lines(density(x.new), col = "blue")
(kernels <- eval(formals(density.default)$kernel))
## show the kernels in the R parametrization
plot (density(0, bw = 1), xlab = "",
main = "R's density() kernels with bw = 1")
for(i in 2:length(kernels))
lines(density(0, bw = 1, kernel = kernels[i]), col = i)
legend(1.5,.4, legend = kernels, col = seq(kernels),
lty = 1, cex = .8, y.intersp = 1)
## show the kernels in the S parametrization
plot(density(0, from = -1.2, to = 1.2, width = 2, kernel = "gaussian"),
type = "l", ylim = c(0, 1), xlab = "",
main = "R's density() kernels with width = 1")
for(i in 2:length(kernels))
lines(density(0, width = 2, kernel = kernels[i]), col = i)
legend(0.6, 1.0, legend = kernels, col = seq(kernels), lty = 1)
##-------- Semi-advanced theoretic from here on -------------
(RKs <- cbind(sapply(kernels,
function(k) density(kernel = k, give.Rkern = TRUE))))
100*round(RKs["epanechnikov",]/RKs, 4) ## Efficiencies
bw <- bw.SJ(precip) ## sensible automatic choice
plot(density(precip, bw = bw),
main = "same sd bandwidths, 7 different kernels")
for(i in 2:length(kernels))
lines(density(precip, bw = bw, kernel = kernels[i]), col = i)
## Bandwidth Adjustment for "Exactly Equivalent Kernels"
h.f <- sapply(kernels, function(k)density(kernel = k, give.Rkern = TRUE))
(h.f <- (h.f["gaussian"] / h.f)^ .2)
## -> 1, 1.01, .995, 1.007,... close to 1 => adjustment barely visible..
plot(density(precip, bw = bw),
main = "equivalent bandwidths, 7 different kernels")
for(i in 2:length(kernels))
lines(density(precip, bw = bw, adjust = h.f[i], kernel = kernels[i]),
col = i)
legend(55, 0.035, legend = kernels, col = seq(kernels), lty = 1)
برای رسم نمودار تابع چگالی احتمال نیز از تابع plot() برای خروجی density() استفاده می کنیم : plot(density(VADeaths))Examples
require(stats) # for lowess, rpois, rnormplot(cars)lines(lowess(cars)) plot(sin, -pi, 2*pi) # see ?plot.function ## Discrete Distribution Plot:plot(table(rpois(100, 5)), type = "h", col = "red", lwd = 10, main = "rpois(100, lambda = 5)") ## Simple quantiles/ECDF, see ecdf() {library(stats)} for a better one:plot(x <- sort(rnorm(47)), type = "s", main = "plot(x, type = \s\")"")points(x, cex = .5, col = ""dark red"")
نظرات
هیچ نظری وجود ندارد.
افزودن نظر
Sitemap
Copyright © 2017 - 2023 Khavarzadeh®. All rights reserved