数学建模社区-数学中国

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

作者: 1047521767    时间: 2021-10-27 14:50
标题: 【R语言】回归分析案例:北京市商品房价格影响因素分析
【R语言】回归分析案例:北京市商品房价格影响因素分析* b1 N/ z8 s0 {/ Y7 |9 e

这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。' ?4 j. b$ \/ I% y3 ~  e" p  c
这里将连续型变量也加进来,进行协方差分析,建立完整的模型。

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

+ O5 ^* f3 {! C* E1 b; W4 \/ v
行描述性统计分析,各连续型变量之间的相关关系如下:
; j9 w6 O. B. O3 ^- l; ~: D+ `2 Z, K, g

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

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


# a) a8 Y* |- M5 j' R# X: G! |# J7 A' e9 n) V9 F

  D' n2 `: i5 w; {" }0 t最终模型残差图:
" M1 ?2 n" B2 X8 {5 V( U# W
% G7 ?3 Z+ x- j  n% }2 |/ V. V
通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:: P/ y, Y( X* N" x+ R8 n  }/ e
属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比
; p# U: W% Z& j/ g, Q+ K- X属性变量的具体影响在此处分析略去。
+ P# |4 c; ]7 @9 D* O; D连续型变量的影响主要为:
, @+ I' U1 [0 T 绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;
. w2 D6 D4 B" F4 w 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;6 X1 ]! G; `* D- l# O
同时,原本为连续型变量的容积率经过离散化变为属性变量后:
% A. q! c  ~: g& ~ 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;
5 I- N, A% }4 D8 F- M9 R 容积率与环线之间存在着交互效应。
& J. I# Y" @2 x: jrm(list=ls())                                                                                #清空当前工作空间
4 b6 t& b) I& Z4 Tsetwd("D:/回归分析")
; ?7 `' g' L: ka=read.csv("real.csv",header=T)                #读入csv格式的数据,赋值为a* l" t8 \4 x( l3 [4 a
View(a)
: K+ J6 A4 ?) G7 G( nattach(a)
* [9 A+ g3 K2 K, V9 u- y9 s  }names(a)
7 a8 X+ l2 s; L# S
; K! r  f5 D7 w, ~) N' l/ l
8 O1 R3 a! w3 N, n
##描述性统计% x1 L5 d( f: E+ j- p, c6 X
" C( T" `2 O( H3 w; X. g! m9 J
  z% E4 q4 k8 V
#未做处理的响应变量分布情况
3 J4 c8 q* G! I9 `6 ^" kpar(mfrow=c(1,1))  F: ~! B8 U- M- i0 _
hist(price)/ b* S7 I5 D% ^
summary(price)        #查看响应变量的描述统计量
4 j' h1 z+ Q0 b  k8 Z' p0 Z#连续型变量描述性统计
/ j5 l; W8 ~- _) m  pwindows()% i/ c5 W6 o7 l) q9 A7 f
pairs(a[,c(6:10)])    #所有连续型变量间的散点图+ O2 Z; n" S" S' X4 N
par(mfrow=c(2,2))        * y  h8 t0 e4 @+ \
plot(rong,price)      #每个连续型因变量与响应变量间的散点图
8 T* \! Q3 F2 [; ~. Y$ Tplot(lv,price)
8 J! I8 d7 _+ J4 N$ U( _. Nplot(area,price)
, G% x) G7 u4 |3 H$ jplot(ratio,price)8 z. n6 X& S& C$ l1 I
summary(a[,c(6:10)])  #查看连续型变量的描述统计量
; g- A3 z) Z0 q* F( Dcor(a[,c(6:10)])      #查看连续型变量的相关系数# f; W4 P4 P' a4 t# [
#属性变量描述性统计# G+ s! e1 S9 E9 l, ?9 G/ R
windows()
" h' i. T. k9 M# Fpar(mfrow=c(2,3))                       
& x6 r/ F8 E) [8 j7 ]+ q6 l! yboxplot(price~dis)          #每个属性变量关于响应变量的箱型图& W0 I: Z0 q  Y, u
boxplot(price~wuye)                                                                        0 g- e8 P9 ?% b$ F; q
boxplot(price~fitment)       
  K" l( i2 O( w' B) }* tboxplot(price~ring)        ( |  D; A, R9 x1 V6 k$ }
boxplot(price~contype)
7 c1 |, T! c% F; v# _) l2 a) T& Q  `# Q& N" S0 j2 V
% `  M3 F7 g" t# b8 y7 v- C: [
: u2 x) P( [4 R" t& t! s/ R& B* |
- O- r- ?# Z; U& t$ b4 W; S9 ^
##模型建立
3 S4 _. \* ?$ z) y9 m3 T; C: n- b$ Q
. R0 C/ E; G  k/ |
#在方差分析模型基础上加入连续型变量* o, p! @) w2 g( H& F/ r
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
; g+ _0 y  x8 i; E# S! ^anova(lm1)                #方差分析
  @4 H! a; ^- [* b$ |0 f# n% f8 Usummary(lm1)              #模型参数估计等详细结果
$ E1 P6 C# s3 E  M/ u# Z( F) Dwindows()
  a+ [5 _: @2 L' B7 H8 Xpar(mfrow=c(2,2))
+ K8 H  j' c# q1 ]* b4 g( a$ `' P0 O% Tplot(lm1,which=c(1:4))    #回归诊断做残差图
2 _2 e/ c1 a; b, ^/ n9 g
: z4 z0 ]5 }7 t! Y8 Y

( _4 U, [7 h8 i- T" C0 t
6 Z' }/ m2 L& C4 g
' d& t/ b. @; K) Z
##变量处理. d8 _+ {- [# I  [0 A& i+ w  J- c
0 E# |  r/ N0 p$ X/ [

  R8 P% @' R3 V" A* ~0 k! `###对不显著的变量采用分组的方式希望能达到显著的效果
% o. q5 E0 K: B$ T/ ?  y7 G, T##对容积率的处理
8 \! I( p+ D- i5 j6 `/ ]windows()
2 ?  Z8 l8 x* C7 s! B6 b- _n = 4' ~* |1 [0 ^, D7 b0 G/ j( T3 {+ C6 e
boxplot(price~ceiling(rong/n))                #容积率多分组下的箱型图                                       
4 s0 k' d; o% c* ^table(ceiling(rong/n))                                                #容积率各分组下的样本数( i4 U4 C" y/ a# }+ E2 _
ronggrp=1*(rong>n)                #进行二分类
' T9 q, k* R4 @#ronggrp=ceiling(rong/n)       
$ A1 k. A/ U/ x+ U) w  w; S$ wtable(ceiling(ronggrp))           #容积率二分类下的样本数) ^' m2 |, I5 K
windows()
) F0 S0 f0 I0 B4 Uboxplot(price~ceiling(ronggrp))   #容积率二分类下的房价箱型图' T7 w" T; h/ ]) w% E5 m3 n* G! C
windows()$ W- e# J! n6 n5 b; z7 E' q2 N8 r
par(mfrow=c(1,2))) \+ h" N; R- O( T* m! x8 g' J
boxplot(rong~ring)                #容积率与环线箱型图, ~/ H& Z+ O9 l- m) I
boxplot(price~ring)               #房价与环线箱型图 ) `  ^; N+ ?4 p' X7 p) m) d2 ^7 M
#加入容积率分组和容积率分组*所在环线交互因子的模型
# m7 D) e' H% L1 ]* dlm2=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)
+ u' k) P* C* Q! qanova(lm2)                #方差分析
" O: b  z, l# b% ^( v+ usummary(lm2)              #模型参数估计等详细结果, p2 `4 L: e% X% Y( V
windows()
# t3 `, ?8 g# x/ S+ u% M' t, vpar(mfrow=c(2,2))/ r0 o# w) Q) t7 R3 M
plot(lm1,which=c(1:4))    #回归诊断
8 W' |1 [1 h4 M2 U
' d# \* A  Q. O( Z( ^

3 u  B3 ^! q% I7 I# T##对小区面积的处理: P& L; b0 D# f) }; P9 g, _/ V/ a2 j
summary(area)
+ ^, }4 b. r  Dplot(area,price)
, C7 G. P3 b; Z4 c. g8 Swindows()+ r& X6 w- B8 Y+ f
n = 150000" x' I: X6 B- ~4 C+ m! ~' Q
boxplot(price~ceiling(area/n))                                                       
% ~8 ^: k: h) H4 N5 K  T' [table(ceiling(area/n))                                                               
4 @1 E2 |9 U# h% @0 u; eareagrp=1*(area>n)
0 ~+ p7 P' e0 @1 H) R) u4 Ttable(ceiling(areagrp))
) R+ o6 ^7 H0 Z6 D% f. vboxplot(price~ceiling(areagrp))
* h% i  u2 q6 W' U# w* n#加入小区面积分组的模型# h6 p6 W, E6 K" Q! f
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)
, l& ?2 f% d8 R6 F! J0 |anova(lm3)                #方差分析! j" o6 U6 G3 x
summary(lm3)              #模型参数估计等详细结果
/ m! n" @5 A# c& @: E- hwindows()
2 V. A+ S7 i( Upar(mfrow=c(2,2))
1 |/ f7 G' H$ e; z  ^3 Dplot(lm3,which=c(1:4))    #回归诊断) R5 e" [9 L% _; e. U$ _5 b

- _' A9 F' i. c' @& d

/ i3 a/ P2 M" f" o! j8 p! D##变量选择
$ D, Z) u; q9 E
! f$ ]% I% y' Z* y+ g
- s  f, y* x3 k9 A, R
##AIC准则下的变量选择
( f9 m5 D6 S3 J7 Q0 b" J& q( Olm4.aic=step(lm3,trace=F)       #根据AIC准则选出最优模型,并赋值给lm.aic
! v0 P6 j# V0 `) usummary(lm4.aic)                #给出模型lm.aic中系数估计值、P值等细节
* n( S2 u- _, M+ ]: l: f* x: L: E. a& y##BIC准则下的变量选择
4 A  Z' c! ~! B/ f5 t! X( xlm5.bic=step(lm3,k=log(length(a[,1])),trace=F)     #根据BIC准则选出最优模型,并赋值给lm.bic
, E' ?+ a6 L4 w: g' i0 ^/ m$ `summary(lm5.bic)         #给出模型lm.bic中系数估计值、P值等细节7 X* ]; `' \& m, ]3 a4 K) x+ F; \1 X
- H4 ?% W; q4 \% u$ k: y
$ U4 G# _* g7 J. }8 q
#选用AIC准则下的模型进行回归诊断! L& b3 i5 x: Y# c6 T0 v0 h
windows()3 W9 r  d8 A$ ^7 c3 |5 e$ w" j5 C
par(mfrow=c(2,2))
/ a1 b  C0 K3 X9 u( wplot(lm4.aic,which=c(1:4))  & D7 k" z: o  o# Z; e1 i

) X( d9 ?; o: M* k) L; J8 K
% m: B" {( Z" r" L
0 u' d) c* z! P2 v+ L& a
  s) Z$ c/ J. k3 |$ @
##数据变换$ g9 P2 j2 f* b
; \0 \; D( m8 H. D2 F1 X# R

5 Z5 I0 o' b, T% h% o% p  E: D#box-cox变换3 t5 K' h( s$ k; w5 {8 t
library(MASS)
& y2 f7 V7 W% n, D3 ab=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))
% S3 Z& m" O% Z6 [" N5 _4 pI=which(b$y==max(b$y))  #定位似然函数最大的位置. h- D, j5 d4 E- o! R
lambda = b$x[I] #精确的λ值: P  @3 w5 W# t& w: w: g* F
#λ接近于0,为模型简洁性,可以直接进行对数变换, S6 ^# S# e; R0 k* K
logprice <- log(price)' f  l# W1 s+ j* U0 r4 z
hist(logprice)
7 a7 \+ ~+ L2 h
9 k1 C8 d, }/ o
- s5 ]1 `$ S9 ^' V/ F# j! |- B
##最终模型与诊断
; a, j! j7 n$ y6 @# \6 c/ C
# R8 w/ n( p" G4 G- S

9 `  \% L% s$ klm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)
& S: X1 L( k  `9 Bwindows()
- `2 c$ Q5 M& o$ q! _2 g, qpar(mfrow=c(2,2))
. L8 T8 L; K4 e# Y0 k" ]2 yplot(lm6,which=c(1:4))2 G8 Q& e( v1 U/ ^
anova(lm6)' K8 Z' E; C( _/ o, T- D- A% t
summary(lm6)
$ H# L; y2 [9 ~
; H" B7 B, F% V
- W( N& t; W  O/ s: h3 H7 |请关注数学中国网微博和数学中国公众号,联系QQ 32437105600 Z& \8 r" ~0 s# E& @4 u) S& I' k

& y7 U5 i- Y  |# Q0 E
1 \$ K, I6 l7 q9 s! t9 |+ |, F; {' s7 W0 }/ b% J

) W, i4 d/ [7 v6 s
作者: fgfroom214    时间: 2021-10-27 16:32
一定会认真的看看,发现这是R的,有python的分析没有  E2 y+ d  P2 t" Y

& t5 r% @/ O9 f4 @' U
作者: sjlxdn    时间: 2021-10-27 19:55
111111111111111
  r7 a4 ~; p2 _% ~3 c
作者: fgfroom214    时间: 2021-10-27 23:18
太好了,又认真的看了一次,发现自已差太多了
+ w1 G/ |: G# ~  t+ s6 @* [: Z, r
1 s2 f/ d8 {9 s% }
作者: 1047521767    时间: 2021-10-28 11:01
fgfroom214 发表于 2021-10-27 23:18
* y5 V! }) {5 o6 V6 t# k太好了,又认真的看了一次,发现自已差太多了
$ h8 T+ d5 w9 I9 q# |% g) M
我每天会发一些好资源的4 }5 d9 R' p7 X( O' I: Q

作者: 1047521767    时间: 2021-10-28 11:01
fgfroom214 发表于 2021-10-27 16:32
; M7 P: z, @2 n4 V9 j, V- {一定会认真的看看,发现这是R的,有python的分析没有
; q3 H" p0 q* P' s; B% Z
有啊. `5 a2 t% h/ h" A( {- V$ O6 @$ _





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