数学建模社区-数学中国

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

作者: 1047521767    时间: 2021-10-27 14:50
标题: 【R语言】回归分析案例:北京市商品房价格影响因素分析
【R语言】回归分析案例:北京市商品房价格影响因素分析
7 B/ D% M7 c; N. p3 b, |0 @

这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。9 n3 Q1 y. e4 A( T) F
这里将连续型变量也加进来,进行协方差分析,建立完整的模型。

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

9 l& S! b$ G+ Z, J) n0 g; H# w4 J
行描述性统计分析,各连续型变量之间的相关关系如下:
2 C8 n6 S$ Y1 s' q6 C! ]2 b, O; V) B) z" Y, k- V

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

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


* R% A+ s( [. z8 C! j
% ~$ I% c5 f' q; C: [% Y5 O; X0 A3 j! f& ]
最终模型残差图:: L# \) C1 O2 q( @1 t5 K

, z3 a% }9 f! [7 j/ X+ Z2 D- l
通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:' o5 z5 z$ y; ^) v4 t& Y
属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比4 b4 V6 f* j5 ]+ O" e! ~3 P
属性变量的具体影响在此处分析略去。+ k4 |' N1 d1 q2 y2 ^1 H6 L
连续型变量的影响主要为:8 z4 Z4 [- Z4 y' @6 c, U; F
 绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;
0 s2 Y& y' Y& i 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
  ~( C4 a- R9 }) G- F; y同时,原本为连续型变量的容积率经过离散化变为属性变量后:
( n6 N1 x( r/ D! n/ y 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;' I" O" K0 w* a. r- n0 h
 容积率与环线之间存在着交互效应。$ a4 t7 H) w) ^
rm(list=ls())                                                                                #清空当前工作空间; a/ O9 X2 L6 i$ r
setwd("D:/回归分析"). W6 Z/ J, q/ K4 `+ k$ W7 M
a=read.csv("real.csv",header=T)                #读入csv格式的数据,赋值为a
) S* k. P& e9 l4 fView(a)
( S' B, ]& P: c$ C0 Wattach(a)
- P- Y9 W; g1 u2 s# snames(a)
6 d/ }: a( F: K5 w; L) v" C2 Q( D- T2 Y6 t: B, X! ?1 p
, H; e- c3 E$ t" Y: m* z- [+ r
##描述性统计
( E5 U* X  v/ g0 ]+ \. Y8 H- m* P
% z0 B1 z* w9 i" ~" H/ h
' ^1 Y9 F$ \4 o+ S0 Q- y
#未做处理的响应变量分布情况
- e3 w6 d( v: g; S* tpar(mfrow=c(1,1))
* \/ {6 Y5 ]1 @) U4 y. whist(price)' n. R* h& K/ Q7 S. ?! ~! }
summary(price)        #查看响应变量的描述统计量/ m5 G9 O+ F9 p
#连续型变量描述性统计
) _/ s/ R8 ~6 S% ?% r2 Pwindows()0 U1 q6 r- n- j, O% Y- W* y
pairs(a[,c(6:10)])    #所有连续型变量间的散点图0 S1 s+ c+ }7 I  `
par(mfrow=c(2,2))        $ C/ @8 N" r, Y- e) M9 O
plot(rong,price)      #每个连续型因变量与响应变量间的散点图" D4 ~" l1 _3 O, ?. V
plot(lv,price)' s' L) x" W8 C8 z# d
plot(area,price)2 X( A& {( E. k* j/ \
plot(ratio,price)
5 |! N& k  n* G4 r( Nsummary(a[,c(6:10)])  #查看连续型变量的描述统计量
* I& V1 y( y& t7 e4 ~- Xcor(a[,c(6:10)])      #查看连续型变量的相关系数$ i2 h2 A& B4 e0 s$ |
#属性变量描述性统计9 b+ Z* h7 _* Z8 g% H
windows()4 w$ i& d8 Z' I2 \! f
par(mfrow=c(2,3))                        + W+ Z- _7 {' ^8 m% |
boxplot(price~dis)          #每个属性变量关于响应变量的箱型图
# Q2 f0 }8 S$ U3 i7 m" ]boxplot(price~wuye)                                                                       
' Q$ `" O3 w0 jboxplot(price~fitment)        6 H. K" Q; e5 A
boxplot(price~ring)       
% g- X/ R, P! z% ?boxplot(price~contype)) f7 H" l* L4 h/ U& I! T

9 @. o- b( W  y7 w# y: m, c' r
4 _' [4 D' s* w6 C
4 h! {2 C. q. h2 Y

- L# \7 t6 u2 N##模型建立
8 |# n" \# f$ _9 g" Y  r0 k
+ U9 V! x, n$ {5 k

) y7 Q/ @% x" g6 A0 ^#在方差分析模型基础上加入连续型变量( W* l! t9 `1 d6 U9 y: P) G* x: v/ }
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
( A+ B$ k, Q6 a) b, Z: ~5 janova(lm1)                #方差分析
( c3 W$ V$ c4 B- G+ j( Msummary(lm1)              #模型参数估计等详细结果
, g" Y  c* n# V( T6 H2 ^windows()1 W5 G7 ~: \# O5 m$ y2 K
par(mfrow=c(2,2))4 c, w$ I+ p7 V
plot(lm1,which=c(1:4))    #回归诊断做残差图2 X9 j: K+ P# A' U: u0 Z; K

7 w3 K* n  g$ P& |. J
, R2 G- N. l. |

& a* N* R1 W$ L$ _/ k" p
( V6 W2 w- o! n9 m9 z, s
##变量处理
# }% _7 x: g. P( Z5 ~7 C, |
+ F% z3 E5 M6 r3 Q( Q
8 r3 n* j6 z; L: k, b( q. Z, a7 T
###对不显著的变量采用分组的方式希望能达到显著的效果/ A. ]3 r8 ^! p6 H7 ^- \
##对容积率的处理
7 v3 t6 q# A5 ^3 n/ O; Awindows()
. p0 C1 j+ ?( P/ y+ an = 4) d3 z, x$ ]. G! X
boxplot(price~ceiling(rong/n))                #容积率多分组下的箱型图                                       
" L0 k* x$ [; wtable(ceiling(rong/n))                                                #容积率各分组下的样本数
$ D4 y+ i! U8 G; ?: D, t6 Qronggrp=1*(rong>n)                #进行二分类0 @/ `) e& t% r: p8 O" g" q
#ronggrp=ceiling(rong/n)       
$ p& A# {5 y. `! K2 a1 |9 M% Wtable(ceiling(ronggrp))           #容积率二分类下的样本数' r: ?7 [+ A2 l3 A  o1 s9 R' {$ T5 ~. H
windows()
$ A8 a( [7 W9 V* ^' n1 mboxplot(price~ceiling(ronggrp))   #容积率二分类下的房价箱型图1 m8 R4 z3 ]# z: F% V3 T$ C6 }
windows(): w% C' I: m) z" ]; \
par(mfrow=c(1,2))
/ m& C6 M9 x# P/ {: Cboxplot(rong~ring)                #容积率与环线箱型图" y1 r+ h5 F9 S3 _2 \9 d: q7 R7 m: ~
boxplot(price~ring)               #房价与环线箱型图
2 w9 c, d% j: b0 k! m( P4 i#加入容积率分组和容积率分组*所在环线交互因子的模型
  i* q2 M+ n) @& r- R" x; Vlm2=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). ]( n1 l. e: J% W! i
anova(lm2)                #方差分析
4 q7 i! Q$ O' P( e" d  Tsummary(lm2)              #模型参数估计等详细结果& G, Z: E; U6 z- H' r
windows()
) D/ Z; N3 w5 p3 P* i  D  e! upar(mfrow=c(2,2))1 o( ^1 o9 ?# P, u; ?5 S
plot(lm1,which=c(1:4))    #回归诊断
4 T6 K' i1 w$ g' G
7 u8 ^+ i( I1 f4 B4 ?

. x) S8 o* ]0 G5 c% r) b##对小区面积的处理
% U* L" Z' W+ @; h) \summary(area)
: r" O5 a% d' y; Gplot(area,price)4 ~) Z3 ~3 ]( R& n/ ]+ q
windows()
! g& Q. L( v/ V+ W" wn = 150000* l, j  p& u5 w7 Y4 @
boxplot(price~ceiling(area/n))                                                       
  Y/ ^: W* c( T; T1 ~7 v  b% Mtable(ceiling(area/n))                                                                5 D; ]2 Q- W0 V" |, r+ c# J
areagrp=1*(area>n)
3 ^3 T- f) |8 o: htable(ceiling(areagrp))
) X2 c/ r) d9 [+ n3 xboxplot(price~ceiling(areagrp))$ d& S# I( y$ ^+ ?
#加入小区面积分组的模型# j& q% Q' N3 C' p/ p* E
lm3=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)
1 I, U4 g- G/ n" |1 ranova(lm3)                #方差分析0 u4 I# U2 Y1 |: L+ K  F& @
summary(lm3)              #模型参数估计等详细结果
- O7 s' A# Y5 ^windows()9 z: f& k( ]9 P6 n; I2 e
par(mfrow=c(2,2))
+ L  A4 z5 X4 b5 ?3 A7 dplot(lm3,which=c(1:4))    #回归诊断
, g4 c+ x+ m2 @7 k% Y( ]0 j
5 L' k) B1 Q+ f) E) U0 K

* H0 @, P  K" T. L. E  G* A##变量选择
/ y* w0 i6 w' x: @4 v5 j! q
1 f: H2 i0 X. T' Y9 }/ Z1 G
/ T& v7 c- Q4 i* N
##AIC准则下的变量选择0 u: a' A4 a' X" e* }' m
lm4.aic=step(lm3,trace=F)       #根据AIC准则选出最优模型,并赋值给lm.aic
2 g( I) p. t) Z% M* lsummary(lm4.aic)                #给出模型lm.aic中系数估计值、P值等细节: p5 W; ?4 A4 M" G& j
##BIC准则下的变量选择3 H, V$ r/ o8 f) W; U
lm5.bic=step(lm3,k=log(length(a[,1])),trace=F)     #根据BIC准则选出最优模型,并赋值给lm.bic% g$ X; H) p  ~
summary(lm5.bic)         #给出模型lm.bic中系数估计值、P值等细节
  \9 A- [8 R3 [' W( X& t
3 v* g# D, y( @
3 s( k4 p: z& E  n3 r' e
#选用AIC准则下的模型进行回归诊断% r( G; e7 e, Y- f$ e
windows(): T3 j8 V3 O' j) M$ `7 I
par(mfrow=c(2,2))8 [/ x5 B  u/ M) D; ^# H
plot(lm4.aic,which=c(1:4))  
: M. ]+ G  E# S
* v, D3 g1 Z+ J! O3 l( u" O

3 [: m8 {8 ?# {: y  Y
7 E6 ]$ f7 e4 i1 S, K" d
& ]9 \0 ]9 W( Z/ ^
##数据变换6 z! D+ \9 J# }3 h6 H- {5 t

1 \) x4 i& X) F+ I/ t6 s! `

" X2 D  i* A# _+ h3 i#box-cox变换
! R: l( Q' _9 f1 `! ]library(MASS)
* q3 W4 B  s4 w6 E" {4 ~5 a; T" B* {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))  N5 \4 Y# {5 g
I=which(b$y==max(b$y))  #定位似然函数最大的位置
. n2 }. ~6 t) ilambda = b$x[I] #精确的λ值5 s2 g& g& E$ x
#λ接近于0,为模型简洁性,可以直接进行对数变换" M* h1 E2 Q/ t( ]
logprice <- log(price)' R# \6 }& a7 C+ I% C* O" R8 J
hist(logprice)- }: E( u  j: M0 ]; }' C4 q

4 ~" T% y6 W- K
+ J' F+ b$ S7 W/ `) \
##最终模型与诊断
7 Q" j& o2 n9 X8 ~1 |0 ]& A' l2 J1 T$ n! t% z
' q+ O+ J6 Z& V% \8 F$ ]: I
lm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)3 \& K  V* U& O  ]0 e
windows(); O+ y4 f( x, v5 ^5 n0 Y9 z- w
par(mfrow=c(2,2))
; b2 z- p$ J# s- a& Eplot(lm6,which=c(1:4))
1 ~: \1 N9 C- R, r$ N8 Nanova(lm6)
/ k( F) z1 a# A& A/ o) E8 lsummary(lm6)# \( ~  ~7 S' g" U+ s+ F0 i

$ w3 c1 o4 x) c& I" U6 c
$ h  \  L6 f% C  b, H5 v8 H请关注数学中国网微博和数学中国公众号,联系QQ 3243710560  g9 g9 S  |: \8 d8 p
5 ~( c: ~7 e: D6 H2 {& K. s9 j
9 ^" p2 _% u4 u3 d) U" m

" j; Q4 d% c$ v$ m+ H1 `& ~! X8 G+ r7 C. O

作者: fgfroom214    时间: 2021-10-27 16:32
一定会认真的看看,发现这是R的,有python的分析没有7 }! H2 ?% y! F. h0 I- g

' k2 K- M: l% s& Q! N# q) p) V
作者: sjlxdn    时间: 2021-10-27 19:55
111111111111111! Z% ?# ~. Z- q; }, o& T- I4 c, a

作者: fgfroom214    时间: 2021-10-27 23:18
太好了,又认真的看了一次,发现自已差太多了
/ \( g$ p& J3 m# U5 }" Z3 g* x" Y8 K7 F/ \

作者: 1047521767    时间: 2021-10-28 11:01
fgfroom214 发表于 2021-10-27 23:18
* `0 o0 [' h; u* f2 m& T" g# s# y$ \太好了,又认真的看了一次,发现自已差太多了
# q1 ]( `  U! t( t% @: I% T" j
我每天会发一些好资源的
# x1 L4 ~3 I# K& J
作者: 1047521767    时间: 2021-10-28 11:01
fgfroom214 发表于 2021-10-27 16:32 , Q& R  b! }$ F3 F3 S7 A
一定会认真的看看,发现这是R的,有python的分析没有
, t3 }" q) N, ?: m$ W. S# S
有啊. \7 D; x3 N0 r7 N4 Z1 W





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