数学建模社区-数学中国

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

作者: 1047521767    时间: 2021-10-27 14:50
标题: 【R语言】回归分析案例:北京市商品房价格影响因素分析
【R语言】回归分析案例:北京市商品房价格影响因素分析
  H0 T1 i# x0 C# \+ u

这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。; ~- K  i2 c: W- v3 m
这里将连续型变量也加进来,进行协方差分析,建立完整的模型。

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

  D! a! J8 A" I4 Y* @0 M
行描述性统计分析,各连续型变量之间的相关关系如下:
( A( A9 B5 H: J5 m3 @: ~" h( R. Y

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

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


  }; R1 ]( A" E! X5 V! \  A; c& ~7 ~1 g) z7 O6 p- B

. l' b$ u+ f0 m1 C/ n+ v+ F最终模型残差图:; r- O4 V9 }! S6 R1 z+ n# U

/ F" ]( V8 W$ K" O  w
通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:
6 I' N# V% q4 F- o9 a# p& e  [属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比) |$ G3 X9 \1 ?8 Z0 ~, p3 }
属性变量的具体影响在此处分析略去。
. y# M$ X6 U* n& V4 C( r  B连续型变量的影响主要为:
& m& w% D* Y# r2 U 绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;' m* \0 Z/ C. X& a
 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;. u) X- ^6 {7 o6 p  b7 B; t$ I% `
同时,原本为连续型变量的容积率经过离散化变为属性变量后:
2 I. w0 Z0 q6 ]- \, k6 r 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;& d8 k! S$ d# I( y
 容积率与环线之间存在着交互效应。
  x. D' k- x; l6 @rm(list=ls())                                                                                #清空当前工作空间- ^' S6 }& |) b. a0 _! X
setwd("D:/回归分析")
* z' g& b# ]# a6 }' f: \; k( k6 da=read.csv("real.csv",header=T)                #读入csv格式的数据,赋值为a( t7 |) h9 {0 Y; D  x7 P
View(a)$ l2 t0 z( N/ T
attach(a)
6 F, S0 q: r7 l: snames(a)
8 z: Z* B2 z( ]+ P
, C& h( l4 b! z9 q

& p9 v5 u/ ^2 `##描述性统计
, ^/ a! F3 ?$ m
. w4 F% @' @8 A( n  \" R

- E7 T! ]5 A3 w6 U2 k+ e7 y#未做处理的响应变量分布情况
& R, s& l0 P& hpar(mfrow=c(1,1)); I1 c2 t# P$ Z0 E
hist(price)
' b' Z+ _4 P' }5 X# c2 P0 Isummary(price)        #查看响应变量的描述统计量
- Q, ?3 @5 b+ U5 z8 I  u" d0 L#连续型变量描述性统计4 s$ M% g: R$ u/ @0 T$ [
windows()
; X0 H5 J" s6 f" [! I* V6 Ypairs(a[,c(6:10)])    #所有连续型变量间的散点图
  M- m8 U. s" }" Mpar(mfrow=c(2,2))       
: R; D. P! k2 b: Hplot(rong,price)      #每个连续型因变量与响应变量间的散点图# T) G( J2 c& b8 W- I( X& M
plot(lv,price)
. v$ X( N+ u* c: |plot(area,price)  f- [) `- |% t4 X2 C
plot(ratio,price)) E. d( X) u( I3 y$ b; |  f; r+ H
summary(a[,c(6:10)])  #查看连续型变量的描述统计量8 r8 i& c# _& @2 I! v; Z" V
cor(a[,c(6:10)])      #查看连续型变量的相关系数
. g8 a( w  i5 V  J#属性变量描述性统计
3 Z9 t5 V0 C+ S" hwindows()* F* A% V) q( M4 E  Y5 g
par(mfrow=c(2,3))                        % z' z5 u3 T: ^; _/ x
boxplot(price~dis)          #每个属性变量关于响应变量的箱型图
$ L9 S0 e! R" V7 k& V4 Nboxplot(price~wuye)                                                                        0 E) \. K3 e% I# y6 ?& N
boxplot(price~fitment)       
- p" v9 i/ \) t! xboxplot(price~ring)        $ v6 E: ?; l6 f1 S% H0 H
boxplot(price~contype)" ~) ?8 }" [; s, k; J1 I- q( @, \3 q

8 X2 R6 w0 j! y
; a& ?6 g, U) e9 ~$ W0 L. d" s( B

$ U; {6 e( y) H( E+ v0 ~7 ~# c8 k
& Z" _* q( h, s0 z: \
##模型建立; h+ s$ {6 M% q2 ^9 ?8 H- n

8 y  N. o* Q5 Z1 ~) A) U3 f
/ q1 r8 s$ X9 C2 {8 L( E9 H7 |
#在方差分析模型基础上加入连续型变量
8 I' T: [7 R. ^$ |& |  tlm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
$ b$ n7 N& b5 W2 Eanova(lm1)                #方差分析
! |" L4 }' a2 _, E- y! l+ Q  Jsummary(lm1)              #模型参数估计等详细结果( T4 w, A, j) l. }+ [( h
windows()
; v* C0 b; v6 r" dpar(mfrow=c(2,2)): V  R8 p. [* C- ~5 A1 Q/ C3 f% h
plot(lm1,which=c(1:4))    #回归诊断做残差图/ W" M& i8 J+ Y! d3 I  d* {  o
4 P5 T9 b$ f  b) a9 x

( _+ q' i& B3 i: g
9 N" a8 q' b; L7 o1 d/ \
& l/ w' f+ j7 o& h- [7 X1 U8 l+ ~
##变量处理6 G! e& E8 P' j8 o, p7 K- n2 O  N
. g8 J. P# `& N9 M; q

+ D5 K& D; X( n. c###对不显著的变量采用分组的方式希望能达到显著的效果$ Z8 K+ F- T' ^# B/ P2 k
##对容积率的处理, }# ^% Z7 D  U3 M( i2 ]2 E
windows()
9 ]2 {/ B9 I% i8 @n = 48 H. b# |9 ~( V9 m& O  ]& M
boxplot(price~ceiling(rong/n))                #容积率多分组下的箱型图                                       
5 F) ?6 U( \8 v# Wtable(ceiling(rong/n))                                                #容积率各分组下的样本数/ I6 I; O9 ]7 r* I4 y- M9 P
ronggrp=1*(rong>n)                #进行二分类  G# F. M! L. s* ?+ b
#ronggrp=ceiling(rong/n)       
) c" s1 |# R4 x4 h5 _" C" W! Htable(ceiling(ronggrp))           #容积率二分类下的样本数
" s+ K$ O3 e4 H- I! j) e& t1 o- O; x) [2 Swindows()
- q; e' U7 G/ O2 bboxplot(price~ceiling(ronggrp))   #容积率二分类下的房价箱型图. }2 j% a  v( z  {
windows()& p$ W& \9 G, L( A) e7 D4 F; a
par(mfrow=c(1,2))) c7 [4 V* H  i' I1 c8 L, w7 @
boxplot(rong~ring)                #容积率与环线箱型图# E3 E5 S  n% a9 J* k
boxplot(price~ring)               #房价与环线箱型图
3 x+ @& N: l  J3 b6 H#加入容积率分组和容积率分组*所在环线交互因子的模型
% J7 \' e8 E2 A! [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)
' @# R3 m; }& L2 P4 Y( c; uanova(lm2)                #方差分析7 m& U, o# Q) ], I
summary(lm2)              #模型参数估计等详细结果
0 `/ w" }7 U8 C  g8 Wwindows()
% ?; m9 ^$ y, z2 X" O! ?) kpar(mfrow=c(2,2))
' q* `$ o  X  g2 Eplot(lm1,which=c(1:4))    #回归诊断; P  y  E& z1 \3 u

& }+ c9 h5 l3 J) j

( J0 l7 j2 ?) I5 T) l$ ]- \1 K* V! ]##对小区面积的处理8 z3 \& e% y! M1 g& \
summary(area)  Z5 W( f: e) c4 }7 F
plot(area,price)# ^- R% {. v" N0 f; U6 J- X$ ?
windows()
* `6 I* F4 D6 n, B% h2 u" j( y  k- Ln = 1500003 k+ j: M4 `' x# q* A) R
boxplot(price~ceiling(area/n))                                                       
# f* p8 c, z7 X& Z" W, |" h" Qtable(ceiling(area/n))                                                                0 f+ k5 ^$ X8 u+ t2 F
areagrp=1*(area>n)% L4 K* a, Z2 o9 ~- D
table(ceiling(areagrp))
4 ~8 r2 K% _+ T' U0 F, @1 f& j% \boxplot(price~ceiling(areagrp))
7 r, R0 `' K+ v* o. d- G4 Z; t#加入小区面积分组的模型) A; i0 V; r" _3 b0 R
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)4 ^% Y: k6 w/ T
anova(lm3)                #方差分析
, G/ f# p9 b% d5 D/ W  tsummary(lm3)              #模型参数估计等详细结果
7 x! O) Z6 P7 I! ^& U9 W0 zwindows()* {5 y. t+ u+ X% ]
par(mfrow=c(2,2))
, {% B; W; m8 c) B  r7 c7 Bplot(lm3,which=c(1:4))    #回归诊断
% V; D! k* g. ?/ L: ^6 z% h: t! j+ L% I1 k2 z( I5 V$ P
( `) q: \6 U7 C) S8 ~  D9 |$ g
##变量选择
5 ^" |$ r& m3 K/ L
- f0 j0 U7 i5 @) n5 X( s, E' ]$ t
( w  U# Q$ y  q1 b( S8 }+ @5 u
##AIC准则下的变量选择- E- P$ r; K. V, T: v6 n% S4 `& d. @
lm4.aic=step(lm3,trace=F)       #根据AIC准则选出最优模型,并赋值给lm.aic
; `  E8 w( s. a% b' v' N. vsummary(lm4.aic)                #给出模型lm.aic中系数估计值、P值等细节
; M+ Y( U! b% [##BIC准则下的变量选择$ E0 t% P4 }/ N7 D5 ]- m0 ^
lm5.bic=step(lm3,k=log(length(a[,1])),trace=F)     #根据BIC准则选出最优模型,并赋值给lm.bic
& ?' K) i" B# G: a8 {summary(lm5.bic)         #给出模型lm.bic中系数估计值、P值等细节9 ]! r+ ^/ r* H' M+ {, N7 J/ O
3 d, G& y5 R: l3 x1 K9 ^# A
, g- B$ J) w0 V' l% L
#选用AIC准则下的模型进行回归诊断
4 R: Y4 H5 H; c! n/ W. fwindows()
! g' S( B5 M0 }1 j% Gpar(mfrow=c(2,2))
! [7 a2 P1 V* ?  P- ]- V2 U$ E. ]plot(lm4.aic,which=c(1:4))  
; L) G- H4 R3 `! Q& `. E2 A
3 P8 m- z0 j% f. x; r" o) l% i0 [: v+ [

; L7 O$ {8 |# i8 f/ y3 d: g2 s" }

7 b) d" E) Q9 a##数据变换
2 s  ]  _5 ^' r9 w9 x% a, i. U* `  \+ k# r; x

4 _& `; z" b; N( f+ }#box-cox变换8 _! U" |9 l0 W' ?
library(MASS)
4 _2 e" g, `* _3 z+ Y& Vb=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))! K) I! Q( o; w& v
I=which(b$y==max(b$y))  #定位似然函数最大的位置: K) F: S9 o, L) q
lambda = b$x[I] #精确的λ值+ q( z! d) |- S) w( I
#λ接近于0,为模型简洁性,可以直接进行对数变换. w" f9 B, p' a& _; S
logprice <- log(price)
( x) P( }  a2 ^hist(logprice)" Z4 B! D9 D: j9 u/ f+ I4 O# e

  Q  x1 {* D( n/ k+ s
) }$ @4 Z; H- N% r$ ~
##最终模型与诊断
0 ~' o, x" W2 _5 _6 w5 ?
$ n& K3 s) t, p: S. J0 R6 Y

7 }. B6 ?3 P! Z9 Q* wlm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)
1 U1 a- V+ d0 a# c- qwindows()
! E2 `8 M$ @% Z: a6 rpar(mfrow=c(2,2))4 Y6 n& Z6 N4 i* V8 J. [8 T
plot(lm6,which=c(1:4))
" k) ]4 C0 O  m- lanova(lm6)+ \! ~+ c, P; Q! p: n
summary(lm6)" i; ?' x: ?' T

* R/ K% X! x0 s" _- |1 R+ @. T5 }) G9 Q- f: ^, @2 x
请关注数学中国网微博和数学中国公众号,联系QQ 3243710560) W$ d, |5 O+ L0 I8 u# ~

. \. Y! \* U( Y! R( ^5 o
7 _) w+ B) [) N  ~0 e
$ d% a$ X; k1 n6 V* G' q
* Q: T$ Q( ~" c* v6 J  ^
作者: fgfroom214    时间: 2021-10-27 16:32
一定会认真的看看,发现这是R的,有python的分析没有
% N+ @7 o% l3 }3 D* f+ u
# i- _% K. V* I5 \# L
作者: sjlxdn    时间: 2021-10-27 19:55
111111111111111
% t1 q' E% o' Y9 Y( ?0 Y
作者: fgfroom214    时间: 2021-10-27 23:18
太好了,又认真的看了一次,发现自已差太多了
1 R8 y8 y( X5 \, v: a
# I( x2 [, X  Y+ R) k- X
作者: 1047521767    时间: 2021-10-28 11:01
fgfroom214 发表于 2021-10-27 23:18 ) F) `5 k) Q+ {
太好了,又认真的看了一次,发现自已差太多了
2 @8 W% c' R" L2 {7 b0 J
我每天会发一些好资源的
2 I& O+ X. R/ V
作者: 1047521767    时间: 2021-10-28 11:01
fgfroom214 发表于 2021-10-27 16:32 % ^: z# u& s7 I
一定会认真的看看,发现这是R的,有python的分析没有

/ U# V4 T8 b$ ]+ t: B7 \有啊
" ?& J5 q% `+ R6 y5 {, O1 ]9 S* ^




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