blob: 2a6c764880e52261c31b1b5fbdb683483653a894 [file] [log] [blame]
R version 3.6.2 Patched (2020-02-12 r77795) -- "Dark and Stormy Night"
Copyright (C) 2020 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
> #### "All the examples" from ./R-intro.texi
> #### -- in a way that this should be(come) an executable script.
>
> options(digits=5, width=65)##--- for outputs !
> options(stringsAsFactors=TRUE) ## factory-fresh defaults
> options(useFancyQuotes=FALSE) ## avoid problems on Windows
>
> ## 2. Simple Manipulations
>
> x <- c(10.4, 5.6, 3.1, 6.4, 21.7)
> assign("x", c(10.4, 5.6, 3.1, 6.4, 21.7))
> c(10.4, 5.6, 3.1, 6.4, 21.7) -> x
> .Last.value
[1] 10.4 5.6 3.1 6.4 21.7
> 1/x
[1] 0.096154 0.178571 0.322581 0.156250 0.046083
>
> y <- c(x, 0, x)
> v <- 2*x + y + 1
Warning message:
In 2 * x + y :
longer object length is not a multiple of shorter object length
> ##- Warning message:
> ##- longer object length
> ##- is not a multiple of shorter object length in: 2 * x + y
>
> sqrt(-17)
[1] NaN
Warning message:
In sqrt(-17) : NaNs produced
> ##- [1] NaN
> ##- Warning message:
> ##- NaNs produced in: sqrt(-17)
>
> sqrt(-17+0i)
[1] 0+4.1231i
>
> ###-- 2.3 .. regular sequences
>
> 1:30
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
[21] 21 22 23 24 25 26 27 28 29 30
>
> n <- 10
>
> 1:n-1
[1] 0 1 2 3 4 5 6 7 8 9
> 1:(n-1)
[1] 1 2 3 4 5 6 7 8 9
> 30:1
[1] 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11
[21] 10 9 8 7 6 5 4 3 2 1
>
> seq(2,10)
[1] 2 3 4 5 6 7 8 9 10
> all(seq(1,30) == seq(to=30, from=1))
[1] TRUE
>
> seq(-5, 5, by=.2) -> s3
> s4 <- seq(length=51, from=-5, by=.2)
> all.equal(s3,s4)
[1] TRUE
>
> s5 <- rep(x, times=5)
> s6 <- rep(x, each=5)
>
> temp <- x > 13
>
> z <- c(1:3,NA); ind <- is.na(z)
>
> 0/0
[1] NaN
> Inf - Inf
[1] NaN
>
> labs <- paste(c("X","Y"), 1:10, sep="")
> labs
[1] "X1" "Y2" "X3" "Y4" "X5" "Y6" "X7" "Y8" "X9" "Y10"
>
> x <- c(z,z-2)#-- NOT in texi ; more interesting
> y <- x[!is.na(x)]
>
> (x+1)[(!is.na(x)) & x>0] -> z
> z
[1] 2 3 4 2
>
> x <- c(x, 9:12)# long enough:
> x[1:10]
[1] 1 2 3 NA -1 0 1 NA 9 10
>
> c("x","y")[rep(c(1,2,2,1), times=4)]
[1] "x" "y" "y" "x" "x" "y" "y" "x" "x" "y" "y" "x" "x" "y" "y"
[16] "x"
>
> y <- x[-(1:5)]
> y
[1] 0 1 NA 9 10 11 12
>
> fruit <- c(5, 10, 1, 20)
> names(fruit) <- c("orange", "banana", "apple", "peach")
> fruit
orange banana apple peach
5 10 1 20
>
> lunch <- fruit[c("apple","orange")]
> lunch
apple orange
1 5
>
> x
[1] 1 2 3 NA -1 0 1 NA 9 10 11 12
> x[is.na(x)] <- 0
> x
[1] 1 2 3 0 -1 0 1 0 9 10 11 12
>
> y <- -4:9
> y[y < 0] <- -y[y < 0]
> all(y == abs(y))
[1] TRUE
> y
[1] 4 3 2 1 0 1 2 3 4 5 6 7 8 9
>
> ###---------------
>
> z <- 0:9
> digits <- as.character(z)
> digits
[1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
> d <- as.integer(digits)
> all.equal(z, d)
[1] TRUE
>
> e <- numeric()
> e[3] <- 17
> e
[1] NA NA 17
>
> alpha <- 10*(1:10)
> alpha <- alpha[2 * 1:5]
> alpha
[1] 20 40 60 80 100
>
> winter <- data.frame(temp = c(-1,3,2,-2), cat = rep(c("A","B"), 2))
> winter
temp cat
1 -1 A
2 3 B
3 2 A
4 -2 B
> unclass(winter)
$temp
[1] -1 3 2 -2
$cat
[1] A B A B
Levels: A B
attr(,"row.names")
[1] 1 2 3 4
>
> ###------------ Ordered and unordered factors --------
> state <- c("tas", "sa", "qld", "nsw", "nsw", "nt", "wa", "wa",
+ "qld", "vic", "nsw", "vic", "qld", "qld", "sa", "tas",
+ "sa", "nt", "wa", "vic", "qld", "nsw", "nsw", "wa",
+ "sa", "act", "nsw", "vic", "vic", "act")
> statef <- factor(state)
> statef
[1] tas sa qld nsw nsw nt wa wa qld vic nsw vic qld qld sa
[16] tas sa nt wa vic qld nsw nsw wa sa act nsw vic vic act
Levels: act nsw nt qld sa tas vic wa
>
> levels(statef)
[1] "act" "nsw" "nt" "qld" "sa" "tas" "vic" "wa"
>
> incomes <- c(60, 49, 40, 61, 64, 60, 59, 54, 62, 69, 70, 42, 56,
+ 61, 61, 61, 58, 51, 48, 65, 49, 49, 41, 48, 52, 46,
+ 59, 46, 58, 43)
>
> incmeans <- tapply(incomes, statef, mean)
> incmeans
act nsw nt qld sa tas vic wa
44.500 57.333 55.500 53.600 55.000 60.500 56.000 52.250
>
> stdError <- function(x) sqrt(var(x)/length(x))
>
> incster <- tapply(incomes, statef, stdError)
> incster
act nsw nt qld sa tas vic wa
1.5000 4.3102 4.5000 4.1061 2.7386 0.5000 5.2440 2.6575
>
> ##
> z <- 1:1500
> dim(z) <- c(3,5,100)
>
>
> x <- array(1:20,dim=c(4,5)) # Generate a 4 by 5 array.
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
>
> i <- array(c(1:3,3:1),dim=c(3,2))
> i # @code{i} is a 3 by 2 index array.
[,1] [,2]
[1,] 1 3
[2,] 2 2
[3,] 3 1
>
> x[i] # Extract those elements
[1] 9 6 3
>
> x[i] <- 0 # Replace those elements by zeros.
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 0 13 17
[2,] 2 0 10 14 18
[3,] 0 7 11 15 19
[4,] 4 8 12 16 20
>
> n <- 60
> b <- 5 ; blocks <- rep(1:b, length= n)
> v <- 6 ; varieties <- gl(v,10)
>
> Xb <- matrix(0, n, b)
> Xv <- matrix(0, n, v)
> ib <- cbind(1:n, blocks)
> iv <- cbind(1:n, varieties)
> Xb[ib] <- 1
> Xv[iv] <- 1
> X <- cbind(Xb, Xv)
>
> N <- crossprod(Xb, Xv)
> table(blocks,varieties)
varieties
blocks 1 2 3 4 5 6
1 2 2 2 2 2 2
2 2 2 2 2 2 2
3 2 2 2 2 2 2
4 2 2 2 2 2 2
5 2 2 2 2 2 2
> all(N == table(blocks,varieties))
[1] TRUE
>
> h <- 1:17
> Z <- array(h, dim=c(3,4,2))
> ## If the size of 'h' is exactly 24
> h <- rep(h, length = 24)
> Z. <- Z ## the result is the same as
> Z <- h; dim(Z) <- c(3,4,2)
> stopifnot(identical(Z., Z))
>
> Z <- array(0, c(3,4,2))
>
> ## So if @code{A}, @code{B} and @code{C} are all similar arrays
> ## <init>
> A <- matrix(1:6, 3,2)
> B <- cbind(1, 1:3)
> C <- rbind(1, rbind(2, 3:4))
> stopifnot(dim(A) == dim(B),
+ dim(B) == dim(C))
> ## <init/>
> D <- 2*A*B + C + 1
>
> a <- 1:9
> b <- 10*(1:3)
>
> ab <- a %o% b
> stopifnot(ab == outer(a,b,"*"),
+ ab == outer(a,b))
>
> x <- 1:10
> y <- -2:2
> f <- function(x, y) cos(y)/(1 + x^2)
> z <- outer(x, y, f)
>
>
> d <- outer(0:9, 0:9)
> fr <- table(outer(d, d, "-"))
> plot(fr, xlab="Determinant", ylab="Frequency")
>
> ##
>
> B <- aperm(A, c(2,1))
> stopifnot(identical(B, t(A)))
>
> ## for example, @code{A} and @code{B} are square matrices of the same size
> ## <init>
> A <- matrix(1:4, 2,2)
> B <- A - 1
> ## <init/>
>
> A * B
[,1] [,2]
[1,] 0 6
[2,] 2 12
>
> A %*% B
[,1] [,2]
[1,] 3 11
[2,] 4 16
>
>
> ## <init>
> x <- c(-1, 2)
> ## <init/>
> x %*% A %*% x
[,1]
[1,] 7
>
> x %*% x
[,1]
[1,] 5
> stopifnot(x %*% x == sum(x^2))
>
> xxT <- cbind(x) %*% x
> xxT
[,1] [,2]
[1,] 1 -2
[2,] -2 4
> stopifnot(identical(xxT, x %*% rbind(x)))
>
> ## crossprod ... (ADD)
>
> ## diag ... (ADD)
>
> ## linear equations ... (ADD)
>
> ## solve ... (ADD)
>
> ## eigen:
> ## a symmetric matrix @code{Sm}
> ## <init>
> Sm <- matrix(-2:6, 3); Sm <- (Sm + t(Sm))/4; Sm
[,1] [,2] [,3]
[1,] -1 0 1
[2,] 0 1 2
[3,] 1 2 3
> ## </init>
> ev <- eigen(Sm)
>
> evals <- eigen(Sm)$values
>
> ## SVD .....
>
> ## "if M is in fact square, then, ..."
> ## <init>
> M <- cbind(1,1:3,c(5,2,3))
> X <- cbind(1:9, .25*(-4:4)^2)
> X1 <- cbind(1:7, -1)
> X2 <- cbind(0,2:8)
> y <- c(1:4, 2:6)
> ## </init>
>
> absdetM <- prod(svd(M)$d)
> stopifnot(all.equal(absdetM, abs(det(M))))# since det() nowadays exists
>
> ans <- lsfit(X, y)
>
> Xplus <- qr(X)
> b <- qr.coef(Xplus, y)
> fit <- qr.fitted(Xplus, y)
> res <- qr.resid(Xplus, y)
> ##
>
> X <- cbind(1, X1, X2)
>
> vec <- as.vector(X)
> vec <- c(X)
>
> statefr <- table(statef)
> statefr
statef
act nsw nt qld sa tas vic wa
2 6 2 5 4 2 5 4
> statefr <- tapply(statef, statef, length)
> statefr
act nsw nt qld sa tas vic wa
2 6 2 5 4 2 5 4
>
> factor(cut(incomes, breaks = 35+10*(0:7))) -> incomef
> table(incomef,statef)
statef
incomef act nsw nt qld sa tas vic wa
(35,45] 1 1 0 1 0 0 1 0
(45,55] 1 1 1 1 2 0 1 3
(55,65] 0 3 1 3 2 2 2 1
(65,75] 0 1 0 0 0 0 1 0
>
> ###--- @chapter 6. Lists and data frames
>
> Lst <- list(name="Fred", wife="Mary", no.children=3,
+ child.ages=c(4,7,9))
> Lst$name
[1] "Fred"
> Lst$wife
[1] "Mary"
> Lst$child.ages[1]
[1] 4
> stopifnot(Lst$name == Lst[[1]], Lst[[1]] == "Fred",
+ Lst$child.ages[1] == Lst[[4]][1], Lst[[4]][1] == 4
+ )
>
> x <- "name" ; Lst[[x]]
[1] "Fred"
>
> ## @section 6.2 Constructing and modifying lists
>
> ##<init>
> Mat <- cbind(1, 2:4)
> ##</init>
> Lst[5] <- list(matrix=Mat)
>
> ## @section 6.3 Data frames
>
> accountants <- data.frame(home=statef, loot=incomes, shot=incomef)
> ## MM: add the next lines to R-intro.texi !
> accountants
home loot shot
1 tas 60 (55,65]
2 sa 49 (45,55]
3 qld 40 (35,45]
4 nsw 61 (55,65]
5 nsw 64 (55,65]
6 nt 60 (55,65]
7 wa 59 (55,65]
8 wa 54 (45,55]
9 qld 62 (55,65]
10 vic 69 (65,75]
11 nsw 70 (65,75]
12 vic 42 (35,45]
13 qld 56 (55,65]
14 qld 61 (55,65]
15 sa 61 (55,65]
16 tas 61 (55,65]
17 sa 58 (55,65]
18 nt 51 (45,55]
19 wa 48 (45,55]
20 vic 65 (55,65]
21 qld 49 (45,55]
22 nsw 49 (45,55]
23 nsw 41 (35,45]
24 wa 48 (45,55]
25 sa 52 (45,55]
26 act 46 (45,55]
27 nsw 59 (55,65]
28 vic 46 (45,55]
29 vic 58 (55,65]
30 act 43 (35,45]
> str(accountants)
'data.frame': 30 obs. of 3 variables:
$ home: Factor w/ 8 levels "act","nsw","nt",..: 6 5 4 2 2 3 8 8 4 7 ...
$ loot: num 60 49 40 61 64 60 59 54 62 69 ...
$ shot: Factor w/ 4 levels "(35,45]","(45,55]",..: 3 2 1 3 3 3 3 2 3 4 ...
>
> ## ..........
>
> ###--- @chapter 8. Probability distributions
>
> ## 2-tailed p-value for t distribution
> 2*pt(-2.43, df = 13)
[1] 0.030331
> ## upper 1% point for an F(2, 7) distribution
> qf(0.01, 2, 7, lower.tail = FALSE)
[1] 9.5466
>
> attach(faithful)
> summary(eruptions)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.60 2.16 4.00 3.49 4.45 5.10
>
> fivenum(eruptions)
[1] 1.6000 2.1585 4.0000 4.4585 5.1000
>
> stem(eruptions)
The decimal point is 1 digit(s) to the left of the |
16 | 070355555588
18 | 000022233333335577777777888822335777888
20 | 00002223378800035778
22 | 0002335578023578
24 | 00228
26 | 23
28 | 080
30 | 7
32 | 2337
34 | 250077
36 | 0000823577
38 | 2333335582225577
40 | 0000003357788888002233555577778
42 | 03335555778800233333555577778
44 | 02222335557780000000023333357778888
46 | 0000233357700000023578
48 | 00000022335800333
50 | 0370
>
> hist(eruptions)
>
> ## <IMG> postscript("images/hist.eps", ...)
> # make the bins smaller, make a plot of density
> hist(eruptions, seq(1.6, 5.2, 0.2), prob=TRUE)
> lines(density(eruptions, bw=0.1))
> rug(eruptions) # show the actual data points
> ## dev.off() <IMG/>
>
> plot(ecdf(eruptions), do.points=FALSE, verticals=TRUE)
>
> ## <IMG> postscript("images/ecdf.eps", ...)
> long <- eruptions[eruptions > 3]
> plot(ecdf(long), do.points=FALSE, verticals=TRUE)
> x <- seq(3, 5.4, 0.01)
> lines(x, pnorm(x, mean=mean(long), sd=sqrt(var(long))), lty=3)
> ## dev.off() <IMG/>
>
> par(pty="s") # arrange for a square figure region
> qqnorm(long); qqline(long)
>
> x <- rt(250, df = 5)
> qqnorm(x); qqline(x)
>
> qqplot(qt(ppoints(250), df = 5), x, xlab = "Q-Q plot for t dsn")
> qqline(x)
>
> shapiro.test(long)
Shapiro-Wilk normality test
data: long
W = 0.979, p-value = 0.011
>
> ks.test(long, "pnorm", mean = mean(long), sd = sqrt(var(long)))
One-sample Kolmogorov-Smirnov test
data: long
D = 0.0661, p-value = 0.43
alternative hypothesis: two-sided
Warning message:
In ks.test(long, "pnorm", mean = mean(long), sd = sqrt(var(long))) :
ties should not be present for the Kolmogorov-Smirnov test
>
> ##@section One- and two-sample tests
>
> ## scan() from stdin :
> ## can be cut & pasted, but not parsed and hence not source()d
> ##scn A <- scan()
> ##scn 79.98 80.04 80.02 80.04 80.03 80.03 80.04 79.97
> ##scn 80.05 80.03 80.02 80.00 80.02
> A <- c(79.98, 80.04, 80.02, 80.04, 80.03, 80.03, 80.04, 79.97,
+ 80.05, 80.03, 80.02, 80, 80.02)
> ##scn B <- scan()
> ##scn 80.02 79.94 79.98 79.97 79.97 80.03 79.95 79.97
> B <- c(80.02, 79.94, 79.98, 79.97, 79.97, 80.03, 79.95, 79.97)
>
> ## <IMG> postscript("images/ice.eps", ...)
> boxplot(A, B)
> ## dev.off() <IMG/>
>
> t.test(A, B)
Welch Two Sample t-test
data: A and B
t = 3.25, df = 12, p-value = 0.0069
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
0.013855 0.070183
sample estimates:
mean of x mean of y
80.021 79.979
>
> var.test(A, B)
F test to compare two variances
data: A and B
F = 0.584, num df = 12, denom df = 7, p-value = 0.39
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
0.12511 2.10527
sample estimates:
ratio of variances
0.58374
>
> t.test(A, B, var.equal=TRUE)
Two Sample t-test
data: A and B
t = 3.47, df = 19, p-value = 0.0026
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
0.016691 0.067348
sample estimates:
mean of x mean of y
80.021 79.979
>
> wilcox.test(A, B)
Wilcoxon rank sum test with continuity correction
data: A and B
W = 89, p-value = 0.0075
alternative hypothesis: true location shift is not equal to 0
Warning message:
In wilcox.test.default(A, B) : cannot compute exact p-value with ties
>
> plot(ecdf(A), do.points=FALSE, verticals=TRUE, xlim=range(A, B))
> plot(ecdf(B), do.points=FALSE, verticals=TRUE, add=TRUE)
>
> ###--- @chapter Grouping, loops and conditional execution
>
>
> ###--- @chapter Writing your own functions
>
>
> ###--- @chapter Statistical models in R
>
>
> ###--- @chapter Graphical procedures
>
> ###--- @appendix A sample session
>
> ## "Simulate starting a new R session, by
> rm(list=ls(all=TRUE))
> set.seed(123) # for repeatability
>
> if(interactive())
+ help.start()
>
> x <- rnorm(50)
> y <- rnorm(x)
> plot(x, y)
> ls()
[1] "x" "y"
> rm(x, y)
> x <- 1:20
> w <- 1 + sqrt(x)/2
> dummy <- data.frame(x = x, y = x + rnorm(x)*w)
> dummy
x y
1 1 -0.06561
2 2 2.43853
3 3 2.53967
4 4 3.30491
5 5 2.98444
6 6 5.89982
7 7 5.17676
8 8 3.97323
9 9 8.04943
10 10 12.37206
11 11 9.47055
12 12 13.66099
13 13 8.46544
14 14 13.84049
15 15 16.52523
16 16 16.90346
17 17 17.32353
18 18 16.00015
19 19 16.29841
20 20 16.68585
> fm <- lm(y ~ x, data=dummy)
> summary(fm)
Call:
lm(formula = y ~ x, data = dummy)
Residuals:
Min 1Q Median 3Q Max
-3.540 -1.103 -0.054 1.152 3.262
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.5431 0.8902 -0.61 0.55
x 0.9653 0.0743 12.99 1.4e-10 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 1.92 on 18 degrees of freedom
Multiple R-squared: 0.904, Adjusted R-squared: 0.898
F-statistic: 169 on 1 and 18 DF, p-value: 1.39e-10
> fm1 <- lm(y ~ x, data=dummy, weight=1/w^2)
> summary(fm1)
Call:
lm(formula = y ~ x, data = dummy, weights = 1/w^2)
Weighted Residuals:
Min 1Q Median 3Q Max
-1.3205 -0.4492 -0.0088 0.5088 1.2656
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.6155 0.6513 -0.94 0.36
x 0.9721 0.0664 14.64 1.9e-11 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.72 on 18 degrees of freedom
Multiple R-squared: 0.922, Adjusted R-squared: 0.918
F-statistic: 214 on 1 and 18 DF, p-value: 1.94e-11
> attach(dummy)
The following object is masked _by_ .GlobalEnv:
x
> lrf <- lowess(x, y)
> plot(x, y)
> lines(x, lrf$y)
> abline(0, 1, lty=3)
> abline(coef(fm))
> abline(coef(fm1), col = "red")
> detach()# dummy
>
> plot(fitted(fm), resid(fm),
+ xlab="Fitted values",
+ ylab="Residuals",
+ main="Residuals vs Fitted")
> qqnorm(resid(fm), main="Residuals Rankit Plot")
> rm(fm, fm1, lrf, x, dummy)
>
>
> filepath <- system.file("data", "morley.tab" , package="datasets")
> if(interactive()) file.show(filepath)
> mm <- read.table(filepath)
> mm
Expt Run Speed
001 1 1 850
002 1 2 740
003 1 3 900
004 1 4 1070
005 1 5 930
006 1 6 850
007 1 7 950
008 1 8 980
009 1 9 980
010 1 10 880
011 1 11 1000
012 1 12 980
013 1 13 930
014 1 14 650
015 1 15 760
016 1 16 810
017 1 17 1000
018 1 18 1000
019 1 19 960
020 1 20 960
021 2 1 960
022 2 2 940
023 2 3 960
024 2 4 940
025 2 5 880
026 2 6 800
027 2 7 850
028 2 8 880
029 2 9 900
030 2 10 840
031 2 11 830
032 2 12 790
033 2 13 810
034 2 14 880
035 2 15 880
036 2 16 830
037 2 17 800
038 2 18 790
039 2 19 760
040 2 20 800
041 3 1 880
042 3 2 880
043 3 3 880
044 3 4 860
045 3 5 720
046 3 6 720
047 3 7 620
048 3 8 860
049 3 9 970
050 3 10 950
051 3 11 880
052 3 12 910
053 3 13 850
054 3 14 870
055 3 15 840
056 3 16 840
057 3 17 850
058 3 18 840
059 3 19 840
060 3 20 840
061 4 1 890
062 4 2 810
063 4 3 810
064 4 4 820
065 4 5 800
066 4 6 770
067 4 7 760
068 4 8 740
069 4 9 750
070 4 10 760
071 4 11 910
072 4 12 920
073 4 13 890
074 4 14 860
075 4 15 880
076 4 16 720
077 4 17 840
078 4 18 850
079 4 19 850
080 4 20 780
081 5 1 890
082 5 2 840
083 5 3 780
084 5 4 810
085 5 5 760
086 5 6 810
087 5 7 790
088 5 8 810
089 5 9 820
090 5 10 850
091 5 11 870
092 5 12 870
093 5 13 810
094 5 14 740
095 5 15 810
096 5 16 940
097 5 17 950
098 5 18 800
099 5 19 810
100 5 20 870
> mm$Expt <- factor(mm$Expt)
> mm$Run <- factor(mm$Run)
> attach(mm)
> plot(Expt, Speed, main="Speed of Light Data", xlab="Experiment No.")
> fm <- aov(Speed ~ Run + Expt, data=mm)
> summary(fm)
Df Sum Sq Mean Sq F value Pr(>F)
Run 19 113344 5965 1.11 0.3632
Expt 4 94514 23629 4.38 0.0031 **
Residuals 76 410166 5397
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
> fm0 <- update(fm, . ~ . - Run)
> anova(fm0, fm)
Analysis of Variance Table
Model 1: Speed ~ Expt
Model 2: Speed ~ Run + Expt
Res.Df RSS Df Sum of Sq F Pr(>F)
1 95 523510
2 76 410166 19 113344 1.11 0.36
> detach()
> rm(fm, fm0)
>
> x <- seq(-pi, pi, len=50)
> y <- x
> f <- outer(x, y, function(x, y) cos(y)/(1 + x^2))
> oldpar <- par(no.readonly = TRUE)
> par(pty="s")
> contour(x, y, f)
> contour(x, y, f, nlevels=15, add=TRUE)
> fa <- (f-t(f))/2
> contour(x, y, fa, nlevels=15)
> par(oldpar)
> image(x, y, f)
> image(x, y, fa)
> objects(); rm(x, y, f, fa)
[1] "f" "fa" "filepath" "mm" "oldpar"
[6] "w" "x" "y"
> th <- seq(-pi, pi, len=100)
> z <- exp(1i*th)
> par(pty="s")
> plot(z, type="l")
> w <- rnorm(100) + rnorm(100)*1i
> w <- ifelse(Mod(w) > 1, 1/w, w)
> plot(w, xlim=c(-1,1), ylim=c(-1,1), pch="+",xlab="x", ylab="y")
> lines(z)
>
> w <- sqrt(runif(100))*exp(2*pi*runif(100)*1i)
> plot(w, xlim=c(-1,1), ylim=c(-1,1), pch="+", xlab="x", ylab="y")
> lines(z)
>
> rm(th, w, z)
> ## q()
>
>