Next: , Previous: Packages, Up: Top



Appendix A 一個演示會話

下麵的會話讓你在操作中對 R 環境的一些特性有個簡單的瞭解。你對系統的許多特性開始時可能 有點不熟悉和困惑,但這些迷惑會很快 消失的。

登錄,啟動你的桌面系統。
$ R
以適當的方式啟動 R1

R 程式開始,並且有一段引導語。

(在 R 裏面,左邊的提示符將不會被顯示防止 混淆。)

help.start()
啟動 HTML 形式的線上幫助(使用你的電腦裏面 可用的流覽器)。你可以用滑鼠 點擊上面的鏈結。

最小化幫助視窗,進入下一部分。

x <- rnorm(50)
y <- rnorm(x)
產生兩個偽正態亂數向量 x 和 y。
plot(x, y)
畫二維散點圖。一個圖形視窗會自動出現。
ls()
查看當前工作空間裏面的 R 物件。
rm(x, y)
去掉不再需要的物件。(清空)。
x <- 1:20
等價於 x = (1, 2, ..., 20)。
w <- 1 + sqrt(x)/2
標準差的`權重'向量。
dummy <- data.frame(x=x, y= x + rnorm(x)*w)
dummy
創建一個由x 和 y構成的雙列資料框, 查看它們。
fm <- lm(y ~ x, data=dummy)
summary(fm)
擬合 y 對 x 的簡單線性回歸,查看 分析結果。
fm1 <- lm(y ~ x, data=dummy, weight=1/w^2)
summary(fm1)
現在我們已經知道標準差,做一個加權回歸。
attach(dummy)
讓資料框中的列項可以像一般的變數那樣使用。
lrf <- lowess(x, y)
做一個非參局部回歸。
plot(x, y)
標準散點圖。
lines(x, lrf$y)
增加局部回歸曲線。
abline(0, 1, lty=3)
真正的回歸曲線:(截距 0,斜率 1)。
abline(coef(fm))
無權重回歸曲線。
abline(coef(fm1), col = "red")
加權回歸曲線。
detach()
將資料框從搜索路徑中去除。
plot(fitted(fm), resid(fm),
     xlab="Fitted values",
     ylab="Residuals",
     main="Residuals vs Fitted")
一個檢驗異方差性(heteroscedasticity)的標準回歸診斷圖。 你可以看見嗎?
qqnorm(resid(fm), main="Residuals Rankit Plot")
用正態分值圖檢驗資料的偏度(skewness),峰度(kurtosis)和異常值(outlier)。 (這裏沒有多大的用途,只是演示一下而已。)
rm(fm, fm1, lrf, x, dummy)
再次清空。

第二部分將研究 Michaelson 和 Morley 測量光速的經典實驗。這個資料集可以 從物件 morley 中得到,但是我們從中讀出資料以演示 函數 read.table 的作用。

filepath <- system.file("data", "morley.tab" , package="datasets")
filepath
得到檔路徑。
file.show(filepath)
可選。查看檔內容。
mm <- read.table(filepath)
mm
以資料框的形式讀取 Michaelson 和 Morley 的資料,並且查看。 資料由五次實驗(Expt 列),每次運行 20 次 (Run 列)的觀測得到。資料框中的 sl 是光速的記錄。 這些資料以適當形式編碼。
mm$Expt <- factor(mm$Expt)
mm$Run <- factor(mm$Run)
ExptRun 改為因數。
attach(mm)
讓資料在位置 3 (默認) 可見(即可以直接訪問)。
plot(Expt, Speed, main="Speed of Light Data", xlab="Experiment No.")
用簡單的盒狀圖比較五次實驗。
fm <- aov(Speed ~ Run + Expt, data=mm)
summary(fm)
分析隨機區組,`runs' 和 `experiments' 作為因數。
fm0 <- update(fm, . ~ . - Run)
anova(fm0, fm)
擬合忽略 `runs' 的子模型,並且對模型更改前後 進行方差分析。
detach()
rm(fm, fm0)
在進行下面工作前,清空資料。

我們現在查看更有趣的圖形顯示特性:等高線和影像顯示。

x <- seq(-pi, pi, len=50)
y <- x
x 是一個在 區間 [-pi\, pi] 內等間距的50個元素的向量, y 類似。
f <- outer(x, y, function(x, y) cos(y)/(1 + x^2))
f 是一個方陣,行列分別被 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)
繪製 f 的等高線;增加一些曲線顯示細節。
fa <- (f-t(f))/2
fa 是 f 的“非對稱部分”(t() 是轉置 函數)。
contour(x, y, fa, nlevels=15)
畫等高線,...
par(oldpar)
... 恢復原始的圖形參數。
image(x, y, f)
image(x, y, fa)
繪製一些高密度的影像顯示,(如果你想要,你可以保存 它的硬拷貝), ...
objects(); rm(x, y, f, fa)
... 在繼續下一步前,清空資料。

R 可以做複數運算。

th <- seq(-pi, pi, len=100)
z <- exp(1i*th)
1i 表示複數 i。
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()
離開 R 程式。你可能被提示是否保存 R 工作空間, 不過對於一個調試性的會話,你可能不想 保存它。

Footnotes

[1] 譯者注:Windows 用戶直接點擊 R 的快捷圖示進入。和其他 Windows 程式一樣操作。