- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40255 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12788
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
【R语言】回归分析案例:北京市商品房价格影响因素分析
( \; f) f4 u; ^) U* l! M# j1 X! k这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。
; e& v& d! G- K: ^& e这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: ![]()
8 B8 p; |: w5 c7 s' `8 f+ g0 T( e行描述性统计分析,各连续型变量之间的相关关系如下:5 A# d9 u7 O4 T/ p9 x& {+ d3 E2 H
![]()
; h5 ?! G9 E+ w- E' `1 p名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。
& y' `+ A& r7 V![]()
. O; j4 d( u6 d![]()
0 R* ?# E8 ~ o: v. g9 q最终模型残差图:: Q, k4 e+ K, b! b1 b4 Y
c/ T6 E! m9 F- n |! U& I
通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:
, j# s [( R1 {8 `( g属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比. V3 ]3 E5 ^, [8 r- g! U+ V
属性变量的具体影响在此处分析略去。
( G2 c. B# n& t7 L9 U1 M连续型变量的影响主要为:! u+ E A" ?6 U2 ]5 K4 v- D. E4 j6 X, {
绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;/ L+ X6 g( H+ s. h
停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
& a; z: m- ~ D; Q3 G2 O5 K* B; m同时,原本为连续型变量的容积率经过离散化变为属性变量后:2 j! f2 i7 W0 b. F
容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;; D9 h5 u+ ^# v; m# @! U' `
容积率与环线之间存在着交互效应。0 Z0 e3 }3 J" r2 ]% H' e. t
rm(list=ls()) #清空当前工作空间
$ \8 T1 v+ z( ~, g* a& osetwd("D:/回归分析")
6 { i5 y5 {3 I0 Ca=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a) t* i/ n7 v2 A3 H: A
View(a)
7 r# h& G/ ~$ y/ S$ c1 Y1 X! _ zattach(a)$ h8 h; [6 |6 v3 [) l5 o7 Y8 ?" _
names(a)4 f& o* y2 l$ k" \5 a2 [3 N
* }7 Z# R% f, ~% B/ q* R' { U8 @9 ]# g6 j$ G* ~# z
##描述性统计
' B6 {4 R3 h& _) ]
: W7 Z" Z) s& \1 ]$ R: b0 K
7 R3 I. H; {. N#未做处理的响应变量分布情况
3 ~1 ~) ?8 @) E+ w4 G3 r7 Gpar(mfrow=c(1,1))
; B* k: B( c2 R Bhist(price)
( j6 e" j3 m' U+ ]9 v1 Osummary(price) #查看响应变量的描述统计量! L7 Z, e& l: e% s4 B6 X
#连续型变量描述性统计
; t9 b3 i, m( `: ^* |4 Rwindows() J5 r N& l- s$ T" p) V2 |1 x
pairs(a[,c(6:10)]) #所有连续型变量间的散点图" a. V2 e$ o7 Q3 M6 q8 {
par(mfrow=c(2,2)) & U5 v- F8 {5 M! j# X
plot(rong,price) #每个连续型因变量与响应变量间的散点图/ A! |/ M3 t- A. d, `
plot(lv,price)2 h# M+ m, d1 Z; ?/ x
plot(area,price) G7 C' P7 d2 r [8 X
plot(ratio,price)
& q9 A4 r1 x( ~: G, D# T# `summary(a[,c(6:10)]) #查看连续型变量的描述统计量 N0 K+ T; b1 ^$ ~5 o- z
cor(a[,c(6:10)]) #查看连续型变量的相关系数
+ W' E; T( t* Q7 y" v#属性变量描述性统计
& g+ `4 T$ f$ r) b! g/ [windows()
7 p8 [4 F& g* u$ m2 [) b8 [par(mfrow=c(2,3)) 2 j. Y! k/ x, H ^+ G
boxplot(price~dis) #每个属性变量关于响应变量的箱型图3 h" r+ |2 P5 d5 h) U* {) m# J
boxplot(price~wuye) 3 {+ e4 s: y( I- o, d! n
boxplot(price~fitment)
" }0 b' B0 b4 _ g/ v9 Wboxplot(price~ring) * u. _5 R) c/ e8 u" H) ^
boxplot(price~contype)
/ m, [! m: K/ _- Y% L3 l3 d7 C a% E8 D
' m/ `% d0 T1 C( m; [. Y' C" U
0 O7 i) p% Q l ^9 f; Y9 y, q% Z
##模型建立
1 F7 u% z, y/ Q
; R/ w/ m, ~* |' U8 K0 B7 F: [8 G2 D1 R- _7 v
#在方差分析模型基础上加入连续型变量
: p- ^& Q7 B+ b! plm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)* `6 P$ ~! c, q+ k2 z8 l: K/ R6 M
anova(lm1) #方差分析+ s: z% b. i8 Z9 C6 Z2 G' `9 k
summary(lm1) #模型参数估计等详细结果6 Z) j7 n) W: T: u1 ]& B
windows()
% D2 q" A7 F# A) a% ipar(mfrow=c(2,2))0 A- I/ n% j% }/ V
plot(lm1,which=c(1:4)) #回归诊断做残差图0 u( n& u3 S3 o0 x
- ^& V, E7 ~' o- U' f$ H5 j
" L- ~; h/ Y" ~! N, j& C0 l! o" }- ~$ |7 F
4 X6 v1 L$ M' l6 T##变量处理4 ` ]. D6 t: V7 K; @4 @3 g
4 [4 e8 t) Y! M5 [! @ K/ C
+ v% ]# [' K" Z" ?: n# M
###对不显著的变量采用分组的方式希望能达到显著的效果% g E) E8 u9 d
##对容积率的处理7 k8 z C: x2 h+ H) R! L* B: h% P
windows()6 L$ n6 Q; s' i n
n = 4
1 `5 p% L, o( X+ o# U/ z+ o+ Q6 wboxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图
2 Q/ j2 n3 M7 q* w0 X! gtable(ceiling(rong/n)) #容积率各分组下的样本数$ f* G# n. z7 n
ronggrp=1*(rong>n) #进行二分类: D& X; \5 Y3 i! ]0 j
#ronggrp=ceiling(rong/n)
! ?0 m8 h+ d9 n, xtable(ceiling(ronggrp)) #容积率二分类下的样本数
- r9 y/ u) `7 f4 k! e7 Nwindows() ?# L" z" ]! E" W0 _( f
boxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图/ d4 \' v4 U6 w1 T
windows()
' a/ l# f0 ^* Y) Zpar(mfrow=c(1,2))
/ x2 A) {4 U w( h( b, g0 {boxplot(rong~ring) #容积率与环线箱型图
5 O7 N% k: b+ q0 A X6 b4 U* Aboxplot(price~ring) #房价与环线箱型图 ' B* B/ U# q% u0 i/ m
#加入容积率分组和容积率分组*所在环线交互因子的模型
; v- Q5 @2 v8 y6 rlm2=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)
! b, @* |4 Z* Vanova(lm2) #方差分析/ E6 k- k) x/ y. Y; J8 u2 A
summary(lm2) #模型参数估计等详细结果
+ ~5 o; _. I6 S, kwindows()
3 D6 _1 [! X" ?$ v1 `par(mfrow=c(2,2))8 L4 \) n. c9 F: q# m
plot(lm1,which=c(1:4)) #回归诊断
& x7 P: ?5 E# ~. W2 x: a5 G2 }8 `
& F8 _- h. }/ C9 b& ^##对小区面积的处理
! f1 h" Q3 V# r2 ?0 W! F( Csummary(area)8 T0 N- ^; M8 x# u( i1 b
plot(area,price)
N% T5 I3 w: V& A: n) @) ]+ owindows()
9 X: O4 d- ~' b/ kn = 150000
# _: X1 U( k! l% v4 c! Q6 U" X, v, j/ iboxplot(price~ceiling(area/n))
! L" T/ c r C5 i" y8 Ntable(ceiling(area/n)) # {6 s3 g) K" M" V% }( z( d1 m
areagrp=1*(area>n)! H! Q& A% u, p) k3 l- }
table(ceiling(areagrp))
" t4 _5 ~! v, c$ j' wboxplot(price~ceiling(areagrp))
/ S( v) H6 S' W3 Z# L2 F( U' e% @, F#加入小区面积分组的模型$ b: A% k: k/ B- Q
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)$ R3 i% |% W' j
anova(lm3) #方差分析5 O' O! w2 E" j! g0 y: V2 Z) B7 U# t
summary(lm3) #模型参数估计等详细结果
/ K: [: p' p& Z9 m) Z/ \windows()1 a+ \# o! b6 `, r. Y' s0 p3 t7 M% V
par(mfrow=c(2,2))
0 ]+ v3 \/ P: n8 Z" {" cplot(lm3,which=c(1:4)) #回归诊断# u. ?: V4 j+ A1 t% M
3 _; M' l# V7 X
7 ~2 j `" i# w- j1 j##变量选择
( I( c; E' P+ s# p; s3 v
# h2 ?8 @ g5 @5 @1 D/ }# Z# D/ @1 ~7 f7 N$ O8 y" f# D% k
##AIC准则下的变量选择
9 [5 S! ?0 S# d. S4 @5 ilm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic( f" ^2 `5 r, `2 k- G
summary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节) e: z) I |% T" H
##BIC准则下的变量选择
2 E; n2 D# {1 G6 X7 P+ b& Elm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic2 C% g5 h# A6 x, S% s, Y3 E/ [+ w
summary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节
1 i$ o/ o. f! ?' t0 z, R/ s. S' o
; g' m& `' [& s" w7 B( D7 P#选用AIC准则下的模型进行回归诊断
- Z! J9 x! x! r- h$ \6 P" Cwindows()/ ]& t4 I( F3 H# J
par(mfrow=c(2,2))
' g+ J C# `6 R: g' D5 Zplot(lm4.aic,which=c(1:4))
2 s5 T! m Q! W; f9 E4 ?& P5 Y( S- y& A/ A5 ?# m$ K4 F
: s/ n; i4 Z4 U I3 z* Z1 m. I
+ r" P. Q# X( M+ E0 B! Y5 `4 `1 h" U" q. o/ s+ U
##数据变换5 [( H% G0 o5 M4 `
) K# l4 D8 N# ` z( c5 E
( r9 |7 X3 w# m x, _( G#box-cox变换9 a" H, c. x* f: r3 |8 Y8 ?4 o+ _
library(MASS)' `& P# i1 \$ F- I2 D5 a
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))
1 F4 r' H5 n# I% F/ ~I=which(b$y==max(b$y)) #定位似然函数最大的位置
7 J3 {7 e" x2 Ylambda = b$x[I] #精确的λ值0 {+ A8 L8 \0 m
#λ接近于0,为模型简洁性,可以直接进行对数变换
5 Q- n F* `; K! E2 Z3 Ologprice <- log(price)% l Z$ N/ ~+ e1 {5 [0 Z
hist(logprice)
9 ~9 u6 B1 m9 h) E0 e9 \
) u, c: f4 R4 @% G7 J( w8 Z
: C- Z! }4 F9 V9 K. P4 @8 j9 a1 E##最终模型与诊断
' q6 E- K) x& c
0 q& }3 z5 A2 I7 W
2 C9 H. R( T5 x* H! ~+ H O1 Elm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)
" D& k9 k. f& r% p6 F# E: Kwindows()
5 G7 ^( J4 \- y! D( z6 o. t) cpar(mfrow=c(2,2))
' Y8 j: \" n7 ?0 b4 Q) E1 y# @plot(lm6,which=c(1:4))
+ G8 D1 Z# r7 Z+ |$ |6 w& Ianova(lm6)
+ |" d4 g U" r- Zsummary(lm6)2 p; ]" q6 X, v j3 R, }* ^
$ L, t$ [9 z% `: q& f
/ f/ D7 q+ C1 d9 C( ^ G S请关注数学中国网微博和数学中国公众号,联系QQ 3243710560
~- D' y! m+ Y' L, h; k: D) ?8 {, b) ^/ X, g7 k( z6 b2 ?( A
L/ E$ u2 @! V) h8 Q+ i6 |! S; ^7 t: R8 S
3 }' M* O1 q' o+ v" P |
zan
|