数学建模社区-数学中国

标题: 【R语言】回归分析案例:北京市商品房价格影响因素分析 [打印本页]

作者: 1047521767    时间: 2021-10-27 14:50
标题: 【R语言】回归分析案例:北京市商品房价格影响因素分析
【R语言】回归分析案例:北京市商品房价格影响因素分析
' K% k( x; d% s7 W6 Z: l. x

这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。* O) O& ]( a0 Z
这里将连续型变量也加进来,进行协方差分析,建立完整的模型。

首先对房价进行对数变换,解决异方差问题:

) J& X+ p! H* N, Y4 I0 y8 C
行描述性统计分析,各连续型变量之间的相关关系如下:
; V3 ^) |# Q" [: B6 I; Y
; |9 p5 V0 H! B! q8 f. d9 }- N) D

名义变量的EDA一般做箱型图。

模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。


! X& L, s8 ]6 G+ W# H: O
+ ~9 N* @9 j# m9 O0 U
# A# A6 M/ d* u7 x, Z最终模型残差图:
) i/ K8 R% p% Y! a
5 u5 K7 y9 {* _
通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:( |+ x# {7 S9 B
属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比# n+ b' \+ R( c# e4 t7 `
属性变量的具体影响在此处分析略去。. q+ z* ^' Z& A
连续型变量的影响主要为:. q( I, [! c7 t/ }
 绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;2 D1 y3 J2 d7 r7 A7 M) V; u
 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
$ ~% }% l0 A. _6 R同时,原本为连续型变量的容积率经过离散化变为属性变量后:
2 y1 ?: ]; N( k; w 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;
4 a. U3 S( _+ H% ~6 q, E 容积率与环线之间存在着交互效应。
$ |9 q$ f! D: ?: rrm(list=ls())                                                                                #清空当前工作空间
7 b4 p( c4 Q2 Wsetwd("D:/回归分析")' {3 \* x7 s% N7 H2 b
a=read.csv("real.csv",header=T)                #读入csv格式的数据,赋值为a% Q0 }* T& Y! S  k- _# x
View(a)/ o- B( ~7 i/ `* j
attach(a)+ c* o. K; Y" u1 t: T) \
names(a)
% ~- G' x, M+ T$ P1 D: K. F, o. R$ L) e7 X& }: x  y1 s
0 H8 R9 U: }! z+ }
##描述性统计& r& M7 b8 ]5 q0 X6 g
# A9 ^- o" C2 Z/ [" i+ \
; q7 W& C2 R4 W6 a# f3 O$ }) h
#未做处理的响应变量分布情况
: K' D5 _9 ~1 _par(mfrow=c(1,1))
" F1 r7 o" W1 b  G1 g7 chist(price): U. }2 Q/ `8 b  t
summary(price)        #查看响应变量的描述统计量
% M5 m) |: v: I. m  L7 f; S#连续型变量描述性统计
% M$ s+ k; Z% D- r% Y+ _8 `" p/ `" `windows()
3 S6 O- G$ e4 ~( L1 Q5 Ipairs(a[,c(6:10)])    #所有连续型变量间的散点图8 k0 V* L' _5 }9 Y7 }
par(mfrow=c(2,2))       
& D. P0 C) ]4 H7 rplot(rong,price)      #每个连续型因变量与响应变量间的散点图
9 v2 w/ U5 {. S9 _) u7 W# `6 v7 pplot(lv,price)
$ q/ J5 L- i; d( Y# y  W+ X6 h5 |plot(area,price)6 ^& J$ p9 \% O' t
plot(ratio,price)1 C, V. _7 V" C. ]2 n
summary(a[,c(6:10)])  #查看连续型变量的描述统计量
% A) I, z# d  ucor(a[,c(6:10)])      #查看连续型变量的相关系数
& ~$ T! p( [# \#属性变量描述性统计, ~! O& Z' O6 c5 b
windows()
% z9 l( b- s6 n+ X, Kpar(mfrow=c(2,3))                        % q' v1 n- a7 L, ]2 P
boxplot(price~dis)          #每个属性变量关于响应变量的箱型图3 ~- R; G  u6 ?( S
boxplot(price~wuye)                                                                       
  L+ y: x4 p# K6 aboxplot(price~fitment)        + I/ H! `) M2 [
boxplot(price~ring)       
: Q+ ~+ Z# G4 }boxplot(price~contype)
( b. K* E- z& d  m4 X) S
0 ]. Y3 J$ x2 L+ c- f! b9 C. g

% Q9 o# I6 g. m9 _3 M, R- {7 Y7 R# a
* b/ A" a. l, L# q" E6 z: C  ?
##模型建立, e* `$ `* G' A: V' m
/ a( j6 E9 R+ w+ E/ }6 H1 V: j
& d7 {! R/ g* _2 j" h. L
#在方差分析模型基础上加入连续型变量, h, J6 @3 T/ V* l2 p1 U
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)' |/ j/ |$ V& }1 F
anova(lm1)                #方差分析1 j9 r8 k: I' G: p- z
summary(lm1)              #模型参数估计等详细结果5 W2 n) E+ n- w. h' y
windows()
; F4 ?5 g- z0 Qpar(mfrow=c(2,2))
4 l/ Q! T! I% M8 h1 s/ oplot(lm1,which=c(1:4))    #回归诊断做残差图2 O% u% J6 U$ e9 }; ]! g# z

+ R7 Q6 k% }% y3 j0 ?1 f
+ `- f9 h1 y5 y1 I5 b: e3 q

6 y. R& X+ |) X& y" z/ E% I2 T

6 V& M! b; `$ X+ I##变量处理0 J" j& `1 E0 Y: m$ }
& N( q( \/ d4 P# n) M7 E

0 \6 D2 d9 G7 _- A3 Q( D###对不显著的变量采用分组的方式希望能达到显著的效果( B) L/ }0 K. i5 h; y; G
##对容积率的处理
/ q- ^6 W6 Y8 t" I9 \+ `" dwindows()4 D, ?) F( P5 n
n = 4
; _* d6 k; C2 l4 B* @boxplot(price~ceiling(rong/n))                #容积率多分组下的箱型图                                        : @+ M* `7 E  x2 F' u/ W. v( e
table(ceiling(rong/n))                                                #容积率各分组下的样本数
* w" N: F7 V7 f% U. P5 K9 ^  Y- }ronggrp=1*(rong>n)                #进行二分类
) W/ C$ S9 ?4 f#ronggrp=ceiling(rong/n)        : I# a4 Q) V% I& w& G
table(ceiling(ronggrp))           #容积率二分类下的样本数% a8 U' K  k- v
windows()9 q3 x' w3 ^" f. B) u3 x! x
boxplot(price~ceiling(ronggrp))   #容积率二分类下的房价箱型图
1 [7 `9 p* |' a0 X) [1 ywindows()2 Q% y) @- u& l/ N
par(mfrow=c(1,2))
" V8 s+ m0 i9 I) j, y8 Pboxplot(rong~ring)                #容积率与环线箱型图
: d0 V5 M. ]6 X/ u, J4 ]boxplot(price~ring)               #房价与环线箱型图
3 n3 S4 k3 u2 D" l! h6 Q#加入容积率分组和容积率分组*所在环线交互因子的模型! D+ l7 J' j  ~1 j0 h
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)
# N* i- y! T/ n7 E/ t& Tanova(lm2)                #方差分析: K- g, c! b# l) U" V
summary(lm2)              #模型参数估计等详细结果1 j8 e$ j7 n' ^- `) ]
windows()
1 M& l8 w3 t* b+ R$ k1 X' Apar(mfrow=c(2,2))9 }/ e& Z; a( [& C3 ^, B( U1 Q
plot(lm1,which=c(1:4))    #回归诊断) _4 _( L+ H7 N9 E! n4 l6 ]1 s4 K

: v) _- R, P$ u) p* _+ X  u/ a
& n( j4 ~3 j7 O/ R- Y
##对小区面积的处理
! X/ w  p* g  ?4 \& w' }& |) Asummary(area)% ^5 e# S  K' ~) k
plot(area,price)
: M1 n  x3 F# y& d/ B, E2 g, Dwindows()
) X9 A$ h: g% S: g: Xn = 150000; u% Y/ g! O( _$ s
boxplot(price~ceiling(area/n))                                                       
0 [( j0 t" w! x$ D' P( Qtable(ceiling(area/n))                                                               
- V# u+ K7 P- v4 j, E- q! n" t7 z  Yareagrp=1*(area>n)' L3 j( ^* c9 ^* Z8 q) {
table(ceiling(areagrp))
- o3 v0 R+ ~: E' b- O: Nboxplot(price~ceiling(areagrp)), ?. a/ Z5 F: {$ C
#加入小区面积分组的模型
1 }8 V3 b9 b' `: w* Clm3=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)" W; J/ K9 V% q* Y8 d3 c
anova(lm3)                #方差分析( N" L* w% v# w, G8 i
summary(lm3)              #模型参数估计等详细结果
  F  E' c. A1 m: f0 zwindows()! x! h! W3 V; F4 J% n! L4 V. B
par(mfrow=c(2,2))
" K1 h: `2 I5 J6 }3 x5 _plot(lm3,which=c(1:4))    #回归诊断2 o  s5 x) r0 y
4 @5 z% l) H/ N: M( a

1 W+ R" C1 Z3 i' x" ]##变量选择
# q) x# h( @  }# `  `' t5 a% }: Q0 n
" v9 }5 M" \5 g* W
##AIC准则下的变量选择* A' o  ^$ h' Y/ y. W1 O5 s0 `
lm4.aic=step(lm3,trace=F)       #根据AIC准则选出最优模型,并赋值给lm.aic9 |0 ^. u8 c! [
summary(lm4.aic)                #给出模型lm.aic中系数估计值、P值等细节; I% i; L" z" I
##BIC准则下的变量选择
- a* ]$ r5 h9 elm5.bic=step(lm3,k=log(length(a[,1])),trace=F)     #根据BIC准则选出最优模型,并赋值给lm.bic
1 f" L! {: @2 f' F. ]summary(lm5.bic)         #给出模型lm.bic中系数估计值、P值等细节
, e$ U* f: y+ b. W! i6 q- i/ X: u; J* k1 T. u- y4 M& L! @
3 @" w! T; k. ~1 l/ C& E. B  f
#选用AIC准则下的模型进行回归诊断2 G* s& v) j0 J' O: O
windows()
9 B" P( |1 C/ c, N- Q, N. j1 epar(mfrow=c(2,2)); M7 N( ?& ~7 t1 ~( w: k
plot(lm4.aic,which=c(1:4))  
3 C0 q+ R7 l9 e- I: F. h# p, D5 Q* y0 l! B' x( Q
) f% p( m  U/ P) D' |) a  `

; v2 q$ l+ b% ~! Z- f- X: h

; z4 V& ?2 e. ]( `2 Y0 L+ z##数据变换2 G1 d$ b2 u+ F0 o0 E0 i5 {- p
1 Z' V1 T  q+ M5 A+ O7 A

. U6 I- t. t+ F3 V3 r#box-cox变换+ \8 N+ G2 i7 Y7 Z; H* g3 F4 @8 {
library(MASS)
9 @  w$ b$ s; b" c9 k  ]" T) s4 Zb=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))
5 {6 C% T' C, ^9 O( VI=which(b$y==max(b$y))  #定位似然函数最大的位置1 d) Z8 f1 f/ s, j- S) e. p
lambda = b$x[I] #精确的λ值
$ g  w" _, m5 Y4 U5 y2 Q) k#λ接近于0,为模型简洁性,可以直接进行对数变换+ b# a7 J$ U4 P1 i2 h
logprice <- log(price): z; X1 b5 t+ i) l; N1 v
hist(logprice)3 a( @0 a$ L6 c* V3 A( o
; X8 _) W) k8 w
% ^1 q( h3 d0 u' A
##最终模型与诊断* b+ U) A9 @* I- _' G

* L; j5 n) \* v  S

; C+ @  }4 y: Z( x9 @8 L, Y0 Ylm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)+ y! B0 R0 b; A: n) N& I
windows()
: _$ `' Z6 t/ _3 npar(mfrow=c(2,2))
3 ^  L, L4 ?% P" x( @plot(lm6,which=c(1:4))
. u. c! T8 t9 P9 v4 Y3 Ganova(lm6)
9 V) w1 o3 O5 H5 [8 d; S) bsummary(lm6)% K' ^* D1 N8 t6 U7 P2 U

0 p6 d- h% C) v. c% c" [
$ g5 r6 k7 _0 ^; x5 A' {; J请关注数学中国网微博和数学中国公众号,联系QQ 3243710560# v9 b3 E( X9 P) U* E' ]

# ?# w. n( k0 Q; g0 S3 _
; X7 L+ y9 }' w, q4 I! Z; H! ~  y. b1 A! U& c8 V% G
# n2 B1 ^. U3 w; p% q0 W

作者: fgfroom214    时间: 2021-10-27 16:32
一定会认真的看看,发现这是R的,有python的分析没有
7 {# k  Q, i8 P! @6 a5 H! \% X( H' m9 ^7 B# M

作者: sjlxdn    时间: 2021-10-27 19:55
1111111111111114 s7 m$ @/ c. B( `  i

作者: fgfroom214    时间: 2021-10-27 23:18
太好了,又认真的看了一次,发现自已差太多了
& p2 @# C5 `8 K! A& `* D& D6 d$ p: ?! a, J

作者: 1047521767    时间: 2021-10-28 11:01
fgfroom214 发表于 2021-10-27 23:18
2 r$ @! A% e6 {2 h) D7 O太好了,又认真的看了一次,发现自已差太多了

: p* O9 v+ _1 i& a, z我每天会发一些好资源的
4 `: h4 x: e) b: K+ P
作者: 1047521767    时间: 2021-10-28 11:01
fgfroom214 发表于 2021-10-27 16:32 + P! a! Q9 z4 V3 W- `: I
一定会认真的看看,发现这是R的,有python的分析没有

  g4 b* C4 X$ j3 @- l有啊
0 q: E! x+ w% H- [




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