- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40178 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12764
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
【R语言】回归分析案例:北京市商品房价格影响因素分析
4 r8 N4 X. \. f) I P这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。
: d6 _! a9 @$ [0 D f这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: * o! f3 y6 s! R9 q! F
行描述性统计分析,各连续型变量之间的相关关系如下:' P) p/ Y* ]9 u% i4 l/ k2 L
0 M0 \; @$ R9 H8 N: J+ z
名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。
- l1 B7 {, N' X1 Y5 a$ l3 z' r2 B+ e 0 _* d1 P7 {( F- W# N
![]()
+ e# J0 B7 ~+ h2 e# ]最终模型残差图:
7 ]& R; w) I- W% a8 f - ?: V @% G; j- I# A3 I
通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有: B$ C/ X8 t# j+ q# A4 X
属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比
6 `/ ^3 _1 i8 Y属性变量的具体影响在此处分析略去。
8 m; C, t3 N6 W) L8 W# \连续型变量的影响主要为:$ {8 d5 F1 Q7 g7 U3 A
绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;
' o% a3 {" L9 J: h 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
! g+ A/ @5 j; A) g3 e O8 L" P同时,原本为连续型变量的容积率经过离散化变为属性变量后:
/ Y, \! n! ^! E. ^; d 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;# X0 z4 k6 L/ z3 H3 y7 @
容积率与环线之间存在着交互效应。
' _* R+ M# h4 c; B/ ]rm(list=ls()) #清空当前工作空间
( l) a' S/ ?# ]2 H$ Gsetwd("D:/回归分析")
. q9 g/ C( m8 w: q5 j. w- y' ma=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a
& g5 C4 T# l# E+ H5 {# p5 SView(a)
' Y4 T& ]8 A( aattach(a)5 O* D7 q) l( h( f( p* w
names(a); o% b4 V8 Q3 ^* d. e
h1 \' y6 u" ~: i2 I+ {7 c; t
* e% |4 o. ?- n+ n$ L& O) S0 m##描述性统计: {/ ~' `* P4 u' U
% V% c5 j& U0 L7 _+ Z3 Y1 w
3 ?$ T( s: ~( D. Z#未做处理的响应变量分布情况
4 q, u3 _& }# e9 opar(mfrow=c(1,1))
5 H4 e5 f `0 t/ D: s1 \# fhist(price)
% K9 H. p8 G0 h9 p8 w) Gsummary(price) #查看响应变量的描述统计量
' y( n& F9 ]/ c8 u5 v#连续型变量描述性统计! d/ o+ l& }! f6 ~9 H/ ^& g. A* X
windows()
* F2 ]" o, ]- Z _+ t# cpairs(a[,c(6:10)]) #所有连续型变量间的散点图
$ k4 M9 D# [: Rpar(mfrow=c(2,2)) , p6 O8 L7 t3 a/ l8 m* u5 d8 q
plot(rong,price) #每个连续型因变量与响应变量间的散点图9 ?" S: W8 L8 f- v2 W; j0 C- k
plot(lv,price)
. W3 J1 [: ?" o; H2 M: C- T" jplot(area,price)
/ T1 m1 {( ?4 h6 [( ^$ Mplot(ratio,price)
$ C9 O2 @* ?; H, [summary(a[,c(6:10)]) #查看连续型变量的描述统计量
% @& ?$ u: u8 Xcor(a[,c(6:10)]) #查看连续型变量的相关系数
. F+ o* S# z) Z#属性变量描述性统计
: t1 C) `0 q* }0 j8 I2 e2 gwindows()5 [" i, M* W6 J7 d" R: }
par(mfrow=c(2,3))
- x% h" o* k3 [, Q9 rboxplot(price~dis) #每个属性变量关于响应变量的箱型图
. u- }% l/ H4 r9 `7 I9 B1 w# Eboxplot(price~wuye) ; ^; `* n8 }" x0 ~( I
boxplot(price~fitment)
& g/ i+ d# z& e+ h, A) [boxplot(price~ring) 2 l/ \3 W3 i* O, D' |
boxplot(price~contype)
{% l# P% w- I- [4 M% E. v$ Q+ [2 a- ?# p9 u) R3 ^3 j$ R f V& n
, T# A+ Y# j& H$ ?
) {; a' i8 C% W2 E# F5 c; }6 M0 E" B
##模型建立 n0 ?4 e* w: C& Z$ U a7 |
% J7 R: s5 \9 R% t/ Y H
, ^+ j P1 F( c, \ |#在方差分析模型基础上加入连续型变量) P0 G$ ?) M: Y7 [
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)1 w. \- v/ y" b7 P5 ]* D8 N. R
anova(lm1) #方差分析5 r* E9 S* ~ t( }7 f5 K0 m e% z
summary(lm1) #模型参数估计等详细结果) h3 X2 h; U3 m1 H
windows()
0 S J8 L8 r3 T, rpar(mfrow=c(2,2)), b& d: i, \+ n- a
plot(lm1,which=c(1:4)) #回归诊断做残差图
f3 p& y) d( |5 O" z1 @+ \" ]$ W" p/ I, g2 r& v
) P6 q2 G6 g/ Z# ?( E" {
" W9 S% r) S" L" b( g5 [+ r
6 ]& o) F v/ j! g##变量处理! G3 V$ W2 H5 F2 A1 }
" [4 S6 g$ h# c; o
/ i m8 I( r% i5 K( t###对不显著的变量采用分组的方式希望能达到显著的效果
9 M/ N- S) V: F+ _ V& E##对容积率的处理
+ I7 t; M# P0 lwindows()
9 |# i4 e& B3 T) ~: qn = 4& S2 Y( q/ s* A% U8 s$ m
boxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图
: ~; q1 i ]& |, {# A# stable(ceiling(rong/n)) #容积率各分组下的样本数6 k7 P1 a8 R! v9 p* N% K
ronggrp=1*(rong>n) #进行二分类5 W0 u- S! j, o! Z& V. @/ X
#ronggrp=ceiling(rong/n)
2 s! x% P# a# g9 }table(ceiling(ronggrp)) #容积率二分类下的样本数2 o3 h( T, b H6 a0 @6 ^
windows()- ^" [8 H. c. Y7 W
boxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图* q _5 y a/ d5 \7 F
windows()
$ k4 T# X6 ~" L& N: zpar(mfrow=c(1,2)); ?1 V- t+ @9 N
boxplot(rong~ring) #容积率与环线箱型图
`: `, j( q) D1 M/ k: }: D, F* ]boxplot(price~ring) #房价与环线箱型图
3 E/ b7 q7 D' s- ^8 E0 g6 X! \#加入容积率分组和容积率分组*所在环线交互因子的模型3 C5 [4 E3 C s# R$ S' O
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)
0 A0 |! A, Q% `; a# \: L5 [anova(lm2) #方差分析
% l1 k2 i% v" E$ w. ~summary(lm2) #模型参数估计等详细结果
! w3 r2 s$ R) L4 j" Uwindows()
( M' I9 b1 B. G$ E: D' A% r: }' Qpar(mfrow=c(2,2))2 x: x9 J& b. |& L2 C. e7 ~0 P/ u
plot(lm1,which=c(1:4)) #回归诊断4 ^7 b( j9 Y. l9 ~0 [, j
3 ?2 ?. f, d" ^9 T4 T- U9 F: q$ p
* G- @9 o) C1 R: p1 ~
##对小区面积的处理
9 x) ^- Z: H1 [summary(area)
i: s* y9 b; ?" \( ]plot(area,price)
* U' @5 N- t) G4 N/ r& ewindows()
0 {4 n5 f- v. Z4 e5 f7 D) @8 u# z. Xn = 1500008 l- v; _, F( r1 i1 H
boxplot(price~ceiling(area/n))
1 R* t. j$ O0 ]table(ceiling(area/n))
5 n$ r. f r9 g3 o) rareagrp=1*(area>n)
, {/ j6 K4 i( D/ P2 Etable(ceiling(areagrp)) @5 R2 x' X. J: v1 K
boxplot(price~ceiling(areagrp))2 x3 _6 s! h3 O0 S Y- `
#加入小区面积分组的模型 s! }2 @- I' B V( r) Z- 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)
5 @4 p2 t( O8 e5 ~3 u" Q4 Ranova(lm3) #方差分析
- [6 y& P J% f& D/ L& \, @summary(lm3) #模型参数估计等详细结果6 u/ N# F4 B1 q4 Y
windows()
: _& g3 ~# a# L" x8 I# O# Qpar(mfrow=c(2,2))% h+ i. P" D$ X# O* t7 E
plot(lm3,which=c(1:4)) #回归诊断% l, T% |2 Y1 H: ^9 B& ?( v, t
7 Q, ]* i }6 C2 w& l" A9 y& N( @5 [! D# Q
##变量选择7 w$ b# y5 B' D+ X* e. g
/ @2 i3 c3 G j1 J% u/ x& @ j! y! C4 K: H5 t8 C6 Z! T
##AIC准则下的变量选择! R$ k( A( O$ H
lm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic# n; O$ e( n' I, {' n8 a' ^
summary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节, ]1 f; l9 E2 ~1 O# L
##BIC准则下的变量选择8 V$ _4 a' r8 _# M9 M
lm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic1 ^. S3 W- T; a% D9 ]7 E
summary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节 r. U( K. P0 w: D0 \: N' C5 D" u0 P
) V5 z2 h) L. _# L
/ r+ B: V; R0 T" L8 M9 V#选用AIC准则下的模型进行回归诊断. y+ [: M5 Q& l3 ]" { Y) M
windows()
$ F( Y- n( o' _6 I* e6 w% Dpar(mfrow=c(2,2))( ?+ o3 K, C2 F: Q; f
plot(lm4.aic,which=c(1:4)) 6 ?" y5 J; T$ C# d
: M0 S" I3 N! F- s* y
9 Q# f9 U8 `5 j" C0 e- O$ e0 X1 a' E$ ~4 F- @: V& H/ _1 k# _. u0 c
- ~% R$ F1 K7 l
##数据变换: A' S; v n0 d6 ~+ X
- t8 O2 N0 t H" H# F
' K/ A, w2 L. m$ ]4 s& ^, Z% z8 U
#box-cox变换
: N2 G2 l1 {( p1 Hlibrary(MASS)
! }% K7 l% l- J+ \' Z5 z! a: b2 qb=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))
0 A+ d% s3 X: D+ J) oI=which(b$y==max(b$y)) #定位似然函数最大的位置( e# h' [- w0 I
lambda = b$x[I] #精确的λ值8 @( J, x% Z4 r+ P( U* X
#λ接近于0,为模型简洁性,可以直接进行对数变换2 e; {+ @8 Y- a0 I9 _* u
logprice <- log(price)" O6 w' {0 r9 ]
hist(logprice), ^" L9 B# {0 R+ Z
L: I, E# T" {4 c: D2 w
( ~3 z) ~8 }3 m. S% y
##最终模型与诊断5 R* m" y! I3 G1 L# i
k% T$ Q! q5 {* Y7 [, O
& r+ I% B1 ?! ylm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)
! V U8 G1 P+ L. X6 c& K5 g$ t* k* uwindows()9 U# ~% [6 p: m4 |3 l% _
par(mfrow=c(2,2))
# K# ] c v2 ~, t$ t) n; Kplot(lm6,which=c(1:4))" W L1 x9 k5 B4 `% z `
anova(lm6)
3 n0 X, K+ v. X) S: vsummary(lm6)
. x2 H1 l2 I4 R, Q) l7 ]- `6 [3 C) F& @1 {) E
4 ]6 B* ?! k, D
请关注数学中国网微博和数学中国公众号,联系QQ 3243710560. `- F A5 K/ I6 D# X& g
0 A! O9 n6 u8 b3 {4 L
; c( M1 h) m# ~/ a
6 V' p) x `4 {" t
# y% O2 C% ]' ]6 E0 R |
zan
|