『原創』統計建模與R軟件-第二章 R軟件的使用


統計建模與R軟件-第二章

2.1 建立一個R文件,在文件中輸入變量 \(x=(1,2,3)^T\), \(y=(4,5,6)^T\),並作以下運算。

(1)計算\(z=2x+y+e\),其中\(e=(1,1,1)^T\)
(2)計算\(x\)\(y\)的內積;
(3)計算\(x\)\(y\)的外積。

x <- c(1, 2, 3)
y <- c(4, 5, 6)
e <- c(1, 1, 1)

2 * x + y + e
## [1]  7 10 13
crossprod(x, y)  #內積
##      [,1]
## [1,]   32
tcrossprod(x, y)  #外積
##      [,1] [,2] [,3]
## [1,]    4    5    6
## [2,]    8   10   12
## [3,]   12   15   18

2.2 將1,2,....,20構成兩個4×5階的矩陣,其中矩陣\(A\)是按列輸入,矩陣\(B\)是按行輸入,並作如下運算。

(1)\(C=A+B\)
(2)\(D=AB\)
(3)\(E=(e_{ij})_{n×n}\),其中\(e_{ij}=a_{ij}.b_{ij}\)
(4)\(F\)是由\(A\)的前3行和前3列構成的矩陣
(5)\(G\)是由矩陣\(B\)的各列構成的矩陣,但不含\(B\)的第3列。

A <- matrix(1:20, nrow = 4, byrow = FALSE)  #按列輸入
B <- matrix(1:20, nrow = 4, byrow = TRUE)  #按行輸入
A
##      [,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
B
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    3    4    5
## [2,]    6    7    8    9   10
## [3,]   11   12   13   14   15
## [4,]   16   17   18   19   20

C <- A + B
C
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    2    7   12   17   22
## [2,]    8   13   18   23   28
## [3,]   14   19   24   29   34
## [4,]   20   25   30   35   40

D <- A %*% B
## Error: 非整合參數
D
## function (expr, name) 
## .Internal(D(expr, name))
## <bytecode: 0x04cb6d4c>
## <environment: namespace:stats>

E <- A * B
E
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1   10   27   52   85
## [2,]   12   42   80  126  180
## [3,]   33   84  143  210  285
## [4,]   64  136  216  304  400

F <- A[1:3, 1:3]
F
##      [,1] [,2] [,3]
## [1,]    1    5    9
## [2,]    2    6   10
## [3,]    3    7   11

G <- B[, -3]
G
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    4    5
## [2,]    6    7    9   10
## [3,]   11   12   14   15
## [4,]   16   17   19   20

2.3 構造一個向量\(x\),向量是由5個1,3個2,4個3和2個4 構成,注意用到rep()函數

c(rep(1, 5), rep(2, 3), rep(3, 4), rep(4, 2))
##  [1] 1 1 1 1 1 2 2 2 3 3 3 3 4 4

2.4 生成一個5階的\(Hilbert\)矩陣,

\[H=(h_{ij})_{n×n}, h_{ij}=\frac{1}{i+j-1},\qquad i,j=1,2,\ldots,n. \]

(1)計算\(Hilbert\)矩陣\(H\)的行列式
(2)求\(H\)的逆矩陣
(3)求\(H\)的特征值和特征向量

n <- 5
H <- array(0, dim = c(n, n))
for (i in 1:n) {
    for (j in 1:n) {
        H[i, j] <- 1/(i + j - 1)
    }
}
H
##        [,1]   [,2]   [,3]   [,4]   [,5]
## [1,] 1.0000 0.5000 0.3333 0.2500 0.2000
## [2,] 0.5000 0.3333 0.2500 0.2000 0.1667
## [3,] 0.3333 0.2500 0.2000 0.1667 0.1429
## [4,] 0.2500 0.2000 0.1667 0.1429 0.1250
## [5,] 0.2000 0.1667 0.1429 0.1250 0.1111
det(H)  #行列式值
## [1] 3.749e-12
solve(H)  #逆矩陣
##       [,1]   [,2]    [,3]    [,4]   [,5]
## [1,]    25   -300    1050   -1400    630
## [2,]  -300   4800  -18900   26880 -12600
## [3,]  1050 -18900   79380 -117600  56700
## [4,] -1400  26880 -117600  179200 -88200
## [5,]   630 -12600   56700  -88200  44100
eigen(H)  #特征值和特征向量
## $values
## [1] 1.567e+00 2.085e-01 1.141e-02 3.059e-04 3.288e-06
## 
## $vectors
##        [,1]    [,2]    [,3]     [,4]      [,5]
## [1,] 0.7679  0.6019 -0.2142  0.04716  0.006174
## [2,] 0.4458 -0.2759  0.7241 -0.43267 -0.116693
## [3,] 0.3216 -0.4249  0.1205  0.66735  0.506164
## [4,] 0.2534 -0.4439 -0.3096  0.23302 -0.767191
## [5,] 0.2098 -0.4290 -0.5652 -0.55760  0.376246

2.5 已知有5名學生的數據,如表2.3所示,用數據框的形式讀入數據。

序號 姓名 性別 年齡 身高(cm) 體重(kg)
1 張三 14 156 42.0
2 李四 15 165 49.0
3 王五 16 157 41.0
4 趙六 14 162 52.0
5 丁一 15 159 45.5
df <- data.frame(seq = 1:5, name = c("張三", "李四", "王五", "趙六", "丁一"), 
    sex = c("女", "男", "女", "男", "女"), age = c(14, 15, 16, 14, 15), height = c(156, 
        165, 157, 162, 159), weight = c(42, 49, 41, 52, 45.5))
df
##   seq name sex age height weight
## 1   1 張三  女  14    156   42.0
## 2   2 李四  男  15    165   49.0
## 3   3 王五  女  16    157   41.0
## 4   4 趙六  男  14    162   52.0
## 5   5 丁一  女  15    159   45.5

2.6 將例2.5中的數據表2.3的數據寫成一個純文本文件,用函數read.table()讀該文件,然后再用函數write.csv()寫成一個能用excel表能打開的文件,並用excel表打開。

df <- data.frame(seq = 1:5, name = c("張三", "李四", "王五", "趙六", "丁一"), 
    sex = c("女", "男", "女", "男", "女"), age = c(14, 15, 16, 14, 15), height = c(156, 
        165, 157, 162, 159), weight = c(42, 49, 41, 52, 45.5))
write.table(df, "ch2_2_6.txt")
df2 <- read.table("ch2_2_6.txt")
write.csv(df2, "ch2_2_6.csv")

2.7 編寫一個R程序(函數)。輸入一個整\(n\),如果\(n<=0\),則終止運算,並輸出一句話:“要求輸入一個正整數”;否則,如果\(n\)是偶數,則將\(n\)除2,並賦值給\(n\);否則將\(3n+1\)賦給\(n\),不斷循環,直到\(n=1\),才停止運算,並輸出一句話:“運算成功”.這個例子是為了驗證數論中的一個簡單定理。

fcul <- function(n) {
    if (n <= 0) 
        list(msg = "要求輸入一個正整數") else {
        repeat {
            if (n == 1) 
                break
            if (n%%2 == 0) {
                n = n/2
            } else {
                n = 3 * n + 1
            }
        }
        list(msg = "運算成功")
    }
}
fcul(-1)
## $msg
## [1] "要求輸入一個正整數"
fcul(10)
## $msg
## [1] "運算成功"

本文由digging4發表於:http://www.cnblogs.com/digging4/p/5031186.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM