数学建模社区-数学中国

标题: 用R语言进行简单线性回归分析 [打印本页]

作者: 数模天下    时间: 2012-12-24 14:05
标题: 用R语言进行简单线性回归分析

用R语言进行简单线性回归分析,数据出自何晓群--应用回归分析,语言如下所示:


6 G8 L4 s; P) x6 Z# I

x y


' z; G; u, y6 w/ G6 l% }

3.4 26.2

1.8 17.8

0 T0 ?4 J5 S, v  _

4.6 31.3

2.3 23.1

3.1 27.5

5.5 36

0.7 14.1

3 22.3


5 k! S7 t+ [" U" t' I- M

2.6 19.6

4.3 31.3


1 p- R. f# U" {0 L0 Q; N6 H* R

2.1 24

3 J& i8 @- L, h: o; M/ O

1.1 17.3


% R+ A5 [* G. Y; f- `) [9 E. I* L

6.1 43.2


  v/ L5 K# L# I3 d$ v3 `4 |! T

4.8 36.4

8 b* s5 s- c2 w- j  ^

3.8 26.1

2 A+ i! {! v7 h, [% A7 f: e( f0 ^

#-------------------------------------------------------------#数据准备

fire <- read.table('D:/fire.txt', head = T)


' H" C# k( H9 B- H$ O6 f* y

#-------------------------------------------------------------#回归分析


; c+ V7 G( A1 c+ T* j& C, J6 X! b

plot(fire$y ~ fire$x)

fire.reg <- lm(fire$y ~ fire$x, data = fire) #回归拟合

summary(fire.reg) #回归分析表

anova(fire.reg) #方差分析表

abline(fire.reg, col = 2, lty = 2) #拟合直线

#-------------------------------------------------------------#残差分析

fire.res <- residuals(fire.reg) #残差

fire.sre <- rstandard(fire.reg) #学生化残差

8 S( }* N# e8 C8 J# }" o3 k* c

plot(fire.sre)

abline(h = 0)

6 x3 n+ N# r4 b2 X/ ^3 @

text(11, fire.sre[11], label = 11, adj = (-0.3), col = 2) #标注点


7 N* g( |( g2 G: I# P# Q

#-------------------------------------------------------------#预测与控制

attach(fire) #连接

5 f7 v6 D  U  n" X5 v

fire.reg <- lm(y ~ x) #这种回归拟合简单

6 y( @% n# A9 S& G- d/ B

fire.points <- data.frame(x = c(3.5, 4))

fire.pred <- predict(fire.reg, fire.points, interval = 'prediction', level = 0.95) #预测:置信区间

fire.pred

detach(fire) #取消连接


5 x) {' w4 |2 p! E

--------------------------------------------------------------------------------------------------

#附自编的过程程序:(R最大的好处是可以自己编想要的程序和函数,尤其没有内置函数的时候)

- V6 M9 s0 [% @& x$ u7 k* I

fire <- read.table('D:/fire.txt', head = T)

) }2 x  O9 z0 u8 c5 Z6 @/ M

attach(fire)

--------------------------------------------

% t& i/ w* T1 l% E6 {9 Q( z

lxy <- function(x){

sum <- 0

4 w: @# v0 ~5 W& H

sum0 <- 0

for(i in 1:length(x)){

) b# g/ W9 A: h; J8 @

sum0 <- (x - mean(x)) * (y-mean(y))


; l5 L% k1 X" N! J$ Q$ @2 g

sum <- sum + sum0}


, e- P6 C$ |6 b

sum}

---------------------------------------------------------------------------------

% M9 f6 t( t& d+ b8 T

#用这个就不需要循环了

+ a3 v& Q' d& A4 {) G  _

lxy <- function(x){

( `4 f+ E5 ~+ I4 H0 ]

mid <- (x - mean(x)) * (y-mean(y))

0 {& B7 S6 _! q& l# Z

sum <- sum(mid)

2 P& O0 h  y* ]8 b& D1 q* R6 E

sum}

#对于数据框、列表等数据对象要善用apply()函数。

---------------------------------------------------------------------------------

lxx <- function(x){

sum <- 0

sum0 <- 0


! o5 n& Z8 v9 v4 ^6 N' M& b9 n1 A

for(i in 1:length(x)){


! |$ I. [- T! S; w- ?

sum0 <- (x - mean(x))^2

( n  j& X5 s9 G( `; r

sum <- sum + sum0}


/ i) L. r3 l$ f( m2 y

sum}

Lxx <- lxx(x)

Lyy <- lxx(y)

Lxy <- lxy(x)

b1 <- Lxy / Lxx; b1 #回归系数斜率

b0 <- mean(y) - b1 * mean(x); b0 #回归系数截距

residu <- y - (b0 + b1*x); residu #残差

r <- Lxy / sqrt(Lxx * Lyy); r #相关系数

rsqure <- r^2; rsqure #决定系数


$ z3 a, w5 g* l7 U6 U  r& m

adrsqure <- 1 - ((length(x)-1)/(length(x)-2))*(1-r^2) #调整后的决定系数

----------------------------------------------------------------------------------

/ ^0 R, c- b$ e& K# V. N6 m

esrequre <- function(x){ #求标准差平方估计值

7 q. T" }: s& j& {/ u* j7 m0 q

sum <- 0


2 r5 d9 {4 ~: y- k

sum0 <- 0

for(i in 1:length(x)){

7 {6 Y" G; Y5 u0 \& `* C3 a

sum0 <- residu^2

sum <- sum + sum0}


9 s% h7 r) u- J

residusqure <- sum/(length(x)-2)

residusqure}

esterreq <- esrequre(x); esterreq #标准差平方估计值(MSE)

ester <- sqrt(esrequre(x)); ester #标准差估计值(回归分析表给出的标准误差)

val_t <- b1*sqrt(Lxx) / ester; val_t #检验回归系数斜率b1的t值

SSe <- function(x){ #求残差平方和

sum <- 0

  T3 P3 D0 b7 q

sum0 <- 0

+ x9 g. [& O  P0 I! \0 V

for(i in 1:length(x)){


* I3 j* T9 e9 \

sum0 <- residu^2

) s# W3 t7 C/ ?4 ?7 [0 s

sum <- sum + sum0}

2 M3 @) }4 D; e5 ^( d7 W3 m/ X7 G

sum}


+ F9 \6 f8 `9 ~5 t3 ^+ D

SSE <- SSe(x); SSE #残差平方和

. @. f* u: j  O0 X9 g1 P, m

MSE <- SSE/(length(x)-2); MSE #残差均方和

SSr <- function(x){


4 H, X% J! g2 a

sum <- 0


- e3 i$ p* {1 F% w7 s2 B4 a

sum0 <- 0

for(i in 1:length(x)){

& }6 w8 Y1 A' P" L5 u

sum0 <- ((b0 + b1*x) - mean(y))^2

sum <- sum + sum0}

! G6 `$ h& z9 ]1 \1 W7 ^5 p

sum}

SSR <- SSr(x); SSR #回归平方和

% A" V# _7 m: A' F0 g3 _# W5 Z/ Y5 I

MSR <- SSR/1; MSR #回归均方和

9 y( A# f) f5 W- Y- a7 B

val_F <- SSR / MSE; val_F #检验回归方程F值

hi <- 1/length(x) + (x-mean(x))^2/Lxx #杠杆值

ZRE <- residu / ester; ZRE #标准化残差

SRE <- residu/(ester*sqrt(1-hi)); SRE #学生化残差

5 C0 `6 Q* C7 E. I  u4 B- }

Y <- function(x){b0 + b1 * x} #点估计

Y(3.5)

: g8 ^' d! h5 S8 k# u- G9 d

6 L. m; b3 \7 o; |) N9 E2 U; Z2 I




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5