- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40222 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12778
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
【R语言】回归分析案例:北京市商品房价格影响因素分析
* K6 ^8 l" L0 K$ V. c- P这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。. A* |& y8 L: {; g/ k8 l- W t- v
这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: . w2 N5 M& Q# q3 F3 Q
行描述性统计分析,各连续型变量之间的相关关系如下:
7 Y G! Q' H4 a3 T4 ~ / `9 _" g! ]7 T1 [: o4 ^
名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。 ; l) v/ F! A% D7 b. u2 D
0 D4 f$ R1 Z2 j9 N! h3 {( B2 y
![]()
+ K: T2 i) U7 [最终模型残差图:$ x* F' ~. ^3 F; u
![]()
4 ?9 O( P* E7 E! y7 k通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:
: B" f6 ?. v* h$ M4 n9 |, A属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比( P" V- J2 p/ x4 p* ~
属性变量的具体影响在此处分析略去。
) ]5 p- U6 K/ Z0 }7 `连续型变量的影响主要为:
: _6 q4 j2 m9 j# @0 I5 _& I1 Q( r 绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;
7 Y# b6 J* J8 |: B' C 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
$ T }) f% Y7 r, E1 E同时,原本为连续型变量的容积率经过离散化变为属性变量后:
K2 j& j2 s# G m1 f# z- G4 i 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;* h" I( X x4 g. L
容积率与环线之间存在着交互效应。: h' @! j" h' ~ l9 R* d; W
rm(list=ls()) #清空当前工作空间' c$ M$ u7 ? B
setwd("D:/回归分析")6 `& ?5 [" |4 p, q1 k( o
a=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a+ X! r$ g+ @0 I
View(a)
) Y4 U, h. Q& z- w, X- u! Q7 A2 eattach(a)5 A4 P: q1 F3 u
names(a)8 t* n i' _! K1 W" _/ w& u
% n4 {# b _5 |7 f" a' d; \' J, {' @' U3 U5 F
##描述性统计9 y8 U9 P) i) X! R
c2 Y# d/ b) w/ R
* I Y' _5 u1 E( C9 G: t: e
#未做处理的响应变量分布情况
/ G) I; N, V1 [. _6 l% t5 Z( qpar(mfrow=c(1,1))
' ^2 `7 _4 B8 V1 B8 {hist(price)8 T0 d; l0 M9 C! s
summary(price) #查看响应变量的描述统计量
/ W7 F2 ]8 J# M3 }/ w#连续型变量描述性统计
8 v; b$ |# V, F2 M7 T/ hwindows()( |+ i+ \) }4 v; l6 t* ?& L4 S
pairs(a[,c(6:10)]) #所有连续型变量间的散点图! z8 c) p' u& g
par(mfrow=c(2,2))
0 H1 w3 T8 o1 O! Y/ U, {+ u# wplot(rong,price) #每个连续型因变量与响应变量间的散点图
4 `. b/ \2 C3 m* u: Tplot(lv,price)
1 z3 @) w5 H; eplot(area,price)
2 k$ D" N% e6 ~* O0 oplot(ratio,price)
/ u( K$ {% s/ r- Esummary(a[,c(6:10)]) #查看连续型变量的描述统计量
- J( {* g& p# N% x- vcor(a[,c(6:10)]) #查看连续型变量的相关系数
" D; A: u7 M9 |0 o& E4 [& n#属性变量描述性统计2 y8 u' d! V U0 c# M4 T& t5 C
windows()) S, ~ @# w% y6 i2 f# L; ?
par(mfrow=c(2,3)) 9 q) f% a1 r9 I+ F6 ]
boxplot(price~dis) #每个属性变量关于响应变量的箱型图
2 {1 M, H$ K% a4 l; _boxplot(price~wuye) ; g# Y, w& w: m+ `& c1 \
boxplot(price~fitment)
$ H, ?; b: @( v3 g ]- b- Fboxplot(price~ring)
1 P) ^6 E* s! V" w6 a: Xboxplot(price~contype)
" G8 [1 j/ Y9 L+ _9 ^9 G8 j& w2 t. {- c" J& l# G: X5 y5 x$ E* u
! J' i0 V- Z3 b% T
, N1 c0 X9 {0 l/ t& Q
& v( H- m$ _ a: f6 W4 w& m8 I
##模型建立
- S( o0 E. P" D, j$ @ S L- \4 Z [1 ^$ ~* q
) C8 R2 ?* d5 }6 p#在方差分析模型基础上加入连续型变量
2 c5 ~ Z3 w) k! O8 ?( J0 @lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
, W) n+ b! _/ i9 M( panova(lm1) #方差分析
, G* x7 U0 j, esummary(lm1) #模型参数估计等详细结果
* t. T! b6 d" V# Cwindows()! r. x" i' H* j- o1 M, z
par(mfrow=c(2,2)). C* \0 d$ `0 N4 o
plot(lm1,which=c(1:4)) #回归诊断做残差图
0 }9 e- `+ K; i4 S% D: K' ~' l, r4 t2 T' ]( Y0 c* _. j/ o- F
, @' u: h# v1 {' { \, \+ W
( ?. j d, O! S0 u' h! a" {1 F0 b
##变量处理
9 j; |- \' }1 a8 P+ _+ @/ Y& e: O( E" R* A; x! s" R! A
+ v4 F, `% p2 ~9 T% w4 J/ p###对不显著的变量采用分组的方式希望能达到显著的效果
' c% R0 P* |( `* E7 c, J( \9 c##对容积率的处理4 Z2 ^* K2 Z4 w
windows()) i3 g0 q+ c7 u! P/ e2 R: H. H
n = 4
5 L, K9 v& f$ x4 c! Hboxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图 . s- m5 c2 K) ~1 w! ?
table(ceiling(rong/n)) #容积率各分组下的样本数
& g" } U# G8 l* i( e7 y0 Kronggrp=1*(rong>n) #进行二分类3 j- p" S) _8 g/ Z. _5 o% Z
#ronggrp=ceiling(rong/n)
% }# O. g* g, y5 {0 [9 @table(ceiling(ronggrp)) #容积率二分类下的样本数* a. l2 u; J6 A% O
windows()' U6 |% L, u3 K+ y3 d
boxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图) Q- Y+ a( }+ Y2 ?! s7 [& F
windows()7 q4 `" ~% G8 L! t/ o$ d# z3 Y( Q
par(mfrow=c(1,2))
6 e5 y, ]/ d% ~ [+ ?+ A* yboxplot(rong~ring) #容积率与环线箱型图! \2 T7 x9 {. }# I- \4 u
boxplot(price~ring) #房价与环线箱型图
* f! [: T# }% G2 h9 o$ E#加入容积率分组和容积率分组*所在环线交互因子的模型* O2 [ M& ~& C0 _" D# i2 y
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)5 D" U1 O F6 h2 g) c
anova(lm2) #方差分析% N7 O2 a K6 ~- c+ S: T
summary(lm2) #模型参数估计等详细结果2 p m! Z5 z/ f2 I
windows()6 T# p3 `, c8 G) _% o: Y# w" d
par(mfrow=c(2,2))7 R+ ~+ p8 Q) z3 l/ N6 k: m, e2 B# P
plot(lm1,which=c(1:4)) #回归诊断5 [. P' z! D/ e3 c/ f- W
0 ~$ B& Q' u% A3 p$ i& P V
4 V# O; D* z8 J7 W" [5 i. {
##对小区面积的处理
( B4 \3 k+ ~3 |8 ?$ h# Nsummary(area)2 L& `) w+ X; E0 U. U& k3 e
plot(area,price)
- y4 N: k. Z; D/ m+ Dwindows()
7 w B+ e, ^' Z2 w8 w* qn = 150000( b$ e, [- _; E) @9 p$ H5 t
boxplot(price~ceiling(area/n))
7 W" u: Y8 j" atable(ceiling(area/n))
, i' y$ z/ s" _0 }areagrp=1*(area>n)) c- y4 u( ~# B3 }
table(ceiling(areagrp))
% Q8 ?( `6 z8 C1 D- rboxplot(price~ceiling(areagrp)): M. H$ @6 ?* R& P$ \% w
#加入小区面积分组的模型# R: x# J F) _5 K0 e% T g1 T
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)$ D, R; o( V! k
anova(lm3) #方差分析
" {1 D* ?# t% w) `* `' ~summary(lm3) #模型参数估计等详细结果& L) u* h- d6 z# \& f# o0 Z
windows()
1 P1 d6 Z: |' ~par(mfrow=c(2,2))
, _7 f9 h, _- |. f0 d o" H) kplot(lm3,which=c(1:4)) #回归诊断+ y% ^4 o& ?2 G7 d2 O
. d8 s n" u3 I9 w& w& D' ?
/ M5 v/ k) v: Q+ t3 @##变量选择) q c7 ^/ o0 K/ m
2 d! h% X' t, T# d4 O
8 q9 g1 F8 _3 G7 E2 p##AIC准则下的变量选择
* n) G" ?% _: B2 t/ ?4 i3 hlm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic% F- K' x# I/ i# Z
summary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节& B3 Q9 z: M ]: v4 X, @3 B5 F
##BIC准则下的变量选择
2 y9 t' N! q0 t- Hlm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic: E$ O8 b' B% Y/ a% l# V% n! Z
summary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节
( ?) z+ a& E. K a: D2 t9 P( q% B7 O5 c
0 K$ J' O& ?7 l" G8 x+ Q0 E- f) c
#选用AIC准则下的模型进行回归诊断* _8 y6 T) ]8 d, h& [! y; {
windows()- O" A' d \. k/ Q
par(mfrow=c(2,2))
" K4 {) w9 p/ q5 |plot(lm4.aic,which=c(1:4))
v2 M$ [' c9 _2 N" j6 _, W% o6 R1 I+ S: @3 y7 W% \3 X
# \+ ]8 a$ W8 W$ b9 N
$ n* o) B: e" d4 I9 j7 T
. ^+ i6 j. K8 R' c4 D
##数据变换1 `0 l( G# V8 z
5 R+ X1 R3 g1 I# ~2 [4 C3 Z
. l l$ e0 f/ Q0 _, l8 Y3 `" Y
#box-cox变换
6 K8 M+ Z& e* X& n' d- F0 @) nlibrary(MASS)
u5 P1 r, Q* r S, J' Pb=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)) V) u9 @: I$ H0 w# t( C
I=which(b$y==max(b$y)) #定位似然函数最大的位置+ F+ R! j# ^" R+ D
lambda = b$x[I] #精确的λ值
6 Y* R5 J. v Z3 o#λ接近于0,为模型简洁性,可以直接进行对数变换9 C7 X ~2 @ v, p L, I
logprice <- log(price)
: z5 ]( @6 D: | Phist(logprice)
) A4 @. c4 t. L, }1 d& p8 F! l
6 D6 t% V: ]& M. A, X. O. Y
B# \ j3 @) [/ y, v##最终模型与诊断$ H% A' O% W* L! J/ g
; h/ r. q; j3 D
7 n2 Z* ^2 c* F+ r( Slm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)8 P( b' ]6 F7 A; v; \. w6 g/ V
windows()% G6 Q- @, A% h
par(mfrow=c(2,2))
* B2 n1 C3 m+ r" zplot(lm6,which=c(1:4))
) F: |% s& q7 b2 E: |anova(lm6)
# r6 h* y% i" b h2 Z- H8 w' {" a6 Usummary(lm6)
6 @6 T6 h# M9 t9 X
" N! A/ ?7 |& G: A( `" |& w3 _
* e0 ^" m3 m6 X4 p2 z请关注数学中国网微博和数学中国公众号,联系QQ 32437105603 X4 h" t }9 S* W6 k1 Q, n! h( ]
# T5 N) d5 ?+ P4 w/ m
! [( F- l# @$ M! L5 W, H1 B7 g
: A | O, `) A
, [, U- r: E/ d$ W. a |
zan
|