R简介及线性回归实验
熟悉 R 语言基本语法
利用 R 语言完成线性回归
利用如下递推公式:
x n = ( a x n − 1 + c ) m o d m x_{n} = ( ax_{n-1} + c ) \ mod \ m xn=(axn−1+c) mod m
用混合同余法产生 ,编写一个函数,并利用该函数计算:
如果 x 0 = 3 x_0 = 3 x0=3, x n = ( 5 n − 1 + 7 ) m o d 200 x_n = (5_{n-1} + 7 )\ mod \ 200 xn=(5n−1+7) mod 200。求 x 0 , x 1 , . . . , x 10 x_0, x_1, ..., x_{10} x0,x1,...,x10
利用递推公式编写函数,依次代入 x n − 1 x_{n-1} xn−1 计算 x n x_{n} xn,即可求得。
f <- function(a, x, c, m) {
(a * x + c) %% m
}
x <- 3
for (i in 1:10) {
x <- f(5, x, 7, 200)
cat("x", i, ": ", x, "\n", sep = "")
}
运行以上代码,我们可以得到 x 0 , x 1 , . . . , x 10 x_0, x_1, ..., x_{10} x0,x1,...,x10,如下图:
考虑服从 (0,1) 区间上均匀分布的独立的随机变量,因此,二维随机变量 (X,Y) 的联合概率密度为:
f ( x , y ) = { 1 , 0 < x < 1 , 0 < y < 1 0 , o t h e r w i s e f(x,y) = \begin{cases} 1, 0
则
P ( X 2 + Y 2 < = 1 ) = π 4 P(X^2 + Y^2 <= 1) = \frac{\pi}{4} P(X2+Y2<=1)=4π
提示:产生均匀分布随机变量
runif()
利用 runif()
函数生成 [0, 1] 上的均匀分布,计算满足公式 (3) 条件的点的频率,以此来估计 π 4 \frac{\pi}{4} 4π 的值
distance <- function(x, y) sum((x - y)^2)
f <- function(n) {
center <- c(0, 0)
pointMatrix <- matrix(runif(n * 2, min = 0, max = 1), nrow = n, ncol = 2, byrow = T)
distMatrix <- apply(pointMatrix, 1, distance, y <- center)
pi <- 4 * mean(distMatrix <= 1)
pi
}
我们运行以上代码,可得到结果
n | f(n) |
---|---|
10 | 4 |
100 | 3.32 |
1000 | 3.08 |
10000 | 3.1436 |
100000 | 3.14732 |
1000000 | 3.143336 |
10000000 | 3.142091 |
我们可以看到,随着生成点数目的逐渐增加, π \pi π 的估计值逐渐向真实值靠近
糖尿病数据:有10个标准化的变量,另外一个是因变量 y,建立合适的线性回归方程进行拟合。
如题,将包括年龄,性别,bmi 等前 10 列变量视作是自变量,将最后一列 y 视作是因变量,利用 lm()
模块进行线性回归建模
data <- read.csv("medical/experiment/experiment1/diabetes.csv")
model <- lm(paste(names(data)[11], paste(names(data)[1:10], collapse="+"), sep = "~"), data)
print(summary(model))
观察上述结果,我们可以发现:
至此,本次实验完成。