【R语言】回归分析案例:北京市商品房价格影响因素分析
/ ?3 Q- l# }0 L2 u这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。
- Z% u8 ~$ x, k) f, D这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: 
# m1 ~) [+ z0 B+ y4 |行描述性统计分析,各连续型变量之间的相关关系如下:3 k6 i7 t6 ]9 I2 [$ O& o

$ u! o- N8 g" J9 h1 h名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。 8 }7 S# d2 b7 Z

1 z3 Z! f! {0 [6 Q 1 I& z6 J- H$ U
最终模型残差图: a6 L) d& C- j5 U4 o, r! s
) Y) r4 g1 d5 \( V2 r通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:3 G4 h6 c R4 p8 x6 D
属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比7 Q3 \0 p) o! O' @" o O
属性变量的具体影响在此处分析略去。$ ]; A" Z+ i& j( g) C
连续型变量的影响主要为:
f5 T/ k0 g: g 绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;
7 c9 f& i; m$ g" l" g 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
% g* V* q- F- R% b# J7 o同时,原本为连续型变量的容积率经过离散化变为属性变量后:
* I; C% q7 ?) t7 q* \! Z: [( n 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;
$ T8 d! ^0 {0 Z* d 容积率与环线之间存在着交互效应。
8 P1 ?/ f2 D4 E& M6 q( `rm(list=ls()) #清空当前工作空间
0 \( C( N! o+ J5 s3 R) Lsetwd("D:/回归分析")
1 o( [' p+ {+ B# S8 @& La=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a# Z/ n) [( H- n6 c
View(a)
9 E! q, z! _# D, Y3 wattach(a)7 C9 U p. H, W$ C# C- q4 a
names(a)
) [( F2 z2 L5 R& I; V% l4 f8 {. Y7 A) q( s4 B% j) S% w) I
6 f7 l/ {4 `4 k( u* n##描述性统计
% ]! W7 @) I5 K' F2 s
- Q+ }, W9 T2 W+ ~! n& U
- X! x$ Z+ B+ y9 D: X! A7 y#未做处理的响应变量分布情况) B+ P# n7 t# v- L! \# q# V
par(mfrow=c(1,1))0 `4 `+ k1 `: _( s3 B5 J3 z; Q
hist(price). E( K0 I& v& C( d, @, h
summary(price) #查看响应变量的描述统计量
) \+ J) |* T B! Y. o/ u" {#连续型变量描述性统计+ {0 N# m9 E' `8 q5 {
windows()0 w6 V" D( I6 N$ [4 B
pairs(a[,c(6:10)]) #所有连续型变量间的散点图
# R( r( v( o' ^% n' jpar(mfrow=c(2,2)) 1 Q( j7 Y3 y+ u
plot(rong,price) #每个连续型因变量与响应变量间的散点图
& ^6 d, @1 z% \7 ^9 tplot(lv,price)
. [) U( ]# m( |8 @& Bplot(area,price)' ?. u- U8 y; A9 T6 Z ?. I
plot(ratio,price)
4 m4 c+ Q2 I3 |0 O lsummary(a[,c(6:10)]) #查看连续型变量的描述统计量6 ~5 L5 j; E# V3 q2 m d! v
cor(a[,c(6:10)]) #查看连续型变量的相关系数
5 m v" {$ B' a- x9 p#属性变量描述性统计, @% K6 Q- J. ^8 i
windows(); W" b' d( y: {1 U: X1 h# H
par(mfrow=c(2,3))
) r3 T K* ?) ?7 j+ i Oboxplot(price~dis) #每个属性变量关于响应变量的箱型图
g# A. v; h$ y( a4 m6 e) v& l6 ?boxplot(price~wuye) - H+ u! e3 q" L5 |
boxplot(price~fitment)
. _* V5 P+ f; z( dboxplot(price~ring) 3 M2 _" m- b1 x
boxplot(price~contype)' O( ?8 t, E" h, _/ d+ m
* I2 h: _/ o8 {' D) i" E" [3 C4 E0 C3 o e
( @+ V% G6 _1 b6 A9 E& ^0 y
+ |" S$ e2 C' y7 F. L: j% B( p##模型建立: Z5 F/ I8 m' c- m, w
) R- ]2 U: E( g0 x: |& d4 d& W- x! |
#在方差分析模型基础上加入连续型变量7 F) j) p, C! }& Z6 {
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
2 e' \0 }6 I6 hanova(lm1) #方差分析 s; G. c! C. O( |
summary(lm1) #模型参数估计等详细结果
2 V6 X3 f2 h# qwindows(); [, D6 L4 J% o# w# x& i
par(mfrow=c(2,2))) F. g# s" M: S9 P$ G
plot(lm1,which=c(1:4)) #回归诊断做残差图
, s3 {) ?- k3 J% L0 S+ A, _/ V4 V h% m( K+ p; ?
& H. `" L, K% t G( ]( A
/ L% ^7 _: p, V
1 d% X2 t! V, L* y; j! G& \
##变量处理
/ w0 H! z& I( S5 y- c/ J. w8 x/ C5 ~; j3 C& v
5 x" h0 d7 b! K" |4 s- g
###对不显著的变量采用分组的方式希望能达到显著的效果
& a4 u; W% k" F4 N% D6 \ [##对容积率的处理
/ ?. g! m/ l( ]! r2 c: Awindows()/ K/ q9 D. Y& C$ a4 c2 j
n = 4
+ L/ U, z& Z/ a: `/ Z; \boxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图
9 t/ S% w, \$ t/ [" X# Htable(ceiling(rong/n)) #容积率各分组下的样本数
) T9 A6 t L# ~8 \ronggrp=1*(rong>n) #进行二分类; Q, p$ P1 J* g* j5 C, F
#ronggrp=ceiling(rong/n) : y. S7 J- `- N; c2 h; a
table(ceiling(ronggrp)) #容积率二分类下的样本数
9 p" N# ~/ \4 o# v5 h6 Kwindows()
$ Z; h7 h! C4 M% b: ]8 dboxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图
, G% d; {3 V' Pwindows()& Q$ h O: X( s# r
par(mfrow=c(1,2))5 |. B5 y* y3 I" I
boxplot(rong~ring) #容积率与环线箱型图
( B4 d5 R7 Q; j- i: Q) e! Eboxplot(price~ring) #房价与环线箱型图
' K- ?; y' m) R! |) q+ B$ i#加入容积率分组和容积率分组*所在环线交互因子的模型' S( U7 v. [9 ^3 z
lm2=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+as.factor(ring)*as.factor(ronggrp)+lv+area+ratio)5 J7 r9 I3 q) t
anova(lm2) #方差分析
- T: c- F p" k6 d. {9 n4 b5 Isummary(lm2) #模型参数估计等详细结果
7 q' h ]4 O/ G! b3 A& Iwindows(), I4 @6 o$ J$ \" p( J8 M
par(mfrow=c(2,2))
: S. m3 t/ Z% ^plot(lm1,which=c(1:4)) #回归诊断: B1 b" U8 |6 }( m- i- _* K2 ~
# b& N* }( Q9 ~3 w) o, v4 v( @# s! M
7 ? u5 E- h( j
##对小区面积的处理* \, V0 O7 i0 C- k9 |* t5 {0 z Z1 D
summary(area)! h% Y" j$ e/ H( L% w0 O0 I. t
plot(area,price)
# T A# j f2 K; v3 ^windows()
& k& I& M. D$ U3 n# H9 Vn = 150000
9 B+ k' X N& X8 b. {- E+ Xboxplot(price~ceiling(area/n))
5 L! \/ v5 N9 q7 \table(ceiling(area/n)) 7 V1 ?- v5 R$ p1 G1 r1 U
areagrp=1*(area>n)
+ K" W; o( u) S4 q( F! ~- ctable(ceiling(areagrp)). A/ w& c/ N. \9 o5 J" P
boxplot(price~ceiling(areagrp))( m/ c9 ?. z: a# S3 H
#加入小区面积分组的模型
6 ~2 y7 E) y5 V8 S+ xlm3=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+as.factor(ring)*as.factor(ronggrp)+lv+as.factor(areagrp)+ratio)
9 t& \+ _. Y, ?& A! Y m9 eanova(lm3) #方差分析5 X9 c H' \/ H1 y. |
summary(lm3) #模型参数估计等详细结果
, J1 k1 s0 l4 X! l1 Kwindows()
% F+ p# i" @- e6 f8 L# C6 A: u( npar(mfrow=c(2,2))/ |) h6 D0 x c
plot(lm3,which=c(1:4)) #回归诊断
: n) w3 p, d" C* ^. U& F
0 W( W: E7 b) A* b4 Z, p$ n6 L5 F+ ^: e8 y
##变量选择+ e' ^4 Z- x$ i% y' Z
) ?$ r# g: K9 g6 G
2 X& T% ^ O8 T2 F##AIC准则下的变量选择2 B/ R& \- a$ D3 J: U+ J* I. D
lm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic: Y$ `' v7 a$ v# C, C- m
summary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节, D6 p0 C+ w3 S* G- ^
##BIC准则下的变量选择
2 T! S: J& a5 ]9 U1 d: flm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic9 E G4 S; F$ W ^
summary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节7 H7 I" ^4 o7 Y! t
2 A: G5 C+ k; m5 Y |0 j* M6 B
7 O$ Y9 \; C- u9 _: K, l* v3 \
#选用AIC准则下的模型进行回归诊断! l( o' ?' w1 y0 m- V8 C0 \
windows()2 l" M- Q, S1 x& _' I9 a
par(mfrow=c(2,2)): F. K3 v8 g7 l' j
plot(lm4.aic,which=c(1:4)) 6 {# T/ F# D/ N2 b
. I0 |$ [7 A( @5 o
1 j+ l% a* H2 m. c4 f! H& r* _, j9 o
# _5 s/ y6 {9 q0 [8 I##数据变换
) P3 e* `# X7 B* L$ B
9 @* q1 e; R- I$ g7 e& b8 `" f/ n1 g) a1 t) y0 Y- w
#box-cox变换8 w0 W0 p9 X# H4 H+ F
library(MASS)$ g& D6 G; t6 S& i U6 |7 ~
b=boxcox(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio, data=a,lambda=seq(-3, 3, by=0.1))
' U& z ^7 _0 \+ T; b0 SI=which(b$y==max(b$y)) #定位似然函数最大的位置" j, i# X8 y/ F4 ^0 W {. S
lambda = b$x[I] #精确的λ值" u! ?# Y% g$ r [" n6 n5 O& v# \
#λ接近于0,为模型简洁性,可以直接进行对数变换! Y2 L+ O$ h% c6 Q& M, U6 k4 c
logprice <- log(price)' Y) G3 d! T" a) a+ R& m
hist(logprice)
( i8 b2 t& t) C7 d- t0 @
- `& A% k2 W( m7 Y. V! T
, ~( ~7 [1 _) ^- [3 L' C##最终模型与诊断6 a+ U; I7 r) r7 C
, T- r1 W6 r* P, X* z8 O, H
4 H" E7 E! b" z- h) h
lm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)# d8 a6 W0 g, q: ^5 M
windows()2 Q) [8 W) F0 z! @ S5 f
par(mfrow=c(2,2))
, S& Y) I% L9 q/ b1 Nplot(lm6,which=c(1:4))
8 J ^* U+ w/ j$ M8 I/ d9 Wanova(lm6)1 c T! I. g9 P$ d7 j, P, h
summary(lm6)
1 c& x& w3 M+ U( B( p( n, h2 D8 V$ A. Z
. o! g7 `5 H s* _; x: Z& E- X2 w
请关注数学中国网微博和数学中国公众号,联系QQ 3243710560+ a- S8 o; @% ~0 f
) F% S1 S' Z8 u* h
/ q3 Z) f( P4 X7 C7 {
- }$ L; a( M0 i' S `$ {, r: q
1 X9 ?$ F% n. C4 D) u |