- 在线时间
- 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语言】回归分析案例:北京市商品房价格影响因素分析
+ c0 ]9 c/ [4 d$ g6 l8 H. r这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。
* p5 d* }8 Z* M, z( Z* v这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: + i9 {: _* f3 w
行描述性统计分析,各连续型变量之间的相关关系如下:
% p" I! D4 W/ u & `* h' |" j% t" z# ?& Q9 t
名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。
1 t/ n( n! U. e7 S ; c5 S, }& D$ l& c
![]()
$ Z4 |4 A3 ] ^4 `最终模型残差图:
! j$ w* O0 V) }9 V. J* y" L![]()
" w, m" O- Z$ U: @2 G7 M/ l& s通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:
* Z% z: Q' i! c: G+ C( I5 _属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比
& q8 l( v; z) X属性变量的具体影响在此处分析略去。
5 u$ O0 T; N5 H9 U连续型变量的影响主要为:$ x: h# F, J: T; m0 Z
绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;& |8 m% U; \! }/ w3 v
停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
! u3 `2 B/ j! b3 m9 n4 u+ }3 q同时,原本为连续型变量的容积率经过离散化变为属性变量后:
1 D& [$ t: S |& d 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;
# B& E6 @8 m& q3 Z 容积率与环线之间存在着交互效应。! M! w2 d( ~& [) P+ m
rm(list=ls()) #清空当前工作空间9 G' Z9 U- [& g' ^* z F
setwd("D:/回归分析")
3 u- X1 Y, i. ^- L9 ?2 ia=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a, Q5 L6 q# `/ i
View(a)% x6 p1 q, J8 E4 e
attach(a)1 e1 B B' F0 ~4 _
names(a)" b/ l) ~/ D) {3 F
3 @! Y! B3 U# [5 P: ?" A# S
& ?, ]1 t C( R" k" W
##描述性统计, ^! k: D+ _. P- [
3 c# S- s% o8 w! m+ K& a9 k0 T
1 E: e( M8 \9 W#未做处理的响应变量分布情况) K/ W& |6 N D$ G g8 ^2 H
par(mfrow=c(1,1))
b4 B+ }* d& T& \4 q& chist(price)( Y4 M5 ^2 z2 C( Q" Q" _8 z
summary(price) #查看响应变量的描述统计量; Z N6 }# {& ?/ v
#连续型变量描述性统计( Q" O2 R0 O6 J4 Y7 ]2 D
windows()
2 r- U3 H, R4 e6 ppairs(a[,c(6:10)]) #所有连续型变量间的散点图9 ^/ j# G e! j6 M
par(mfrow=c(2,2))
4 T" [1 Q7 _; R1 S* gplot(rong,price) #每个连续型因变量与响应变量间的散点图! y7 W' l* V- u; [. w. t
plot(lv,price): p) |- K9 i1 ~% |: i
plot(area,price)
5 \# ?; T2 x; ^; P& Hplot(ratio,price)! W7 I, K6 S5 [4 t4 H0 i- A9 C
summary(a[,c(6:10)]) #查看连续型变量的描述统计量5 D+ ]. t% A. F' X- p; w
cor(a[,c(6:10)]) #查看连续型变量的相关系数
3 W/ z) b# b) C7 h Y) |#属性变量描述性统计5 G2 f9 l- ^% Z. p- f5 S6 f
windows()5 E) j) s6 l r; x E/ p
par(mfrow=c(2,3))
. W! C2 H: w Q- a9 Iboxplot(price~dis) #每个属性变量关于响应变量的箱型图 i4 @ z7 p" a `, j9 ?% s
boxplot(price~wuye) 9 T! [, o" _ n! C" x" b
boxplot(price~fitment) 3 [) F |) J5 R7 s. }9 ^$ \( V
boxplot(price~ring) " }+ \) }. v! z) G# S3 P
boxplot(price~contype)
7 P! x7 F; g( B, R$ R! \6 ?
h6 F" C1 O( q) i" q7 N# R/ Z' q1 L* l& ?2 y, A
1 w8 F0 e$ w1 J/ I
+ r+ M. X1 x9 D) c0 u5 {##模型建立: w9 a- W( H) {& ^" k
2 T- g8 B7 f3 t8 u
. J# B( H/ c! b. k) j- u6 Q' [6 j#在方差分析模型基础上加入连续型变量
m; H e, w% r3 rlm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio), q! V) Y0 X! `+ t' }2 f. h
anova(lm1) #方差分析3 ^* [3 R. U0 b$ g4 k( N' h: |
summary(lm1) #模型参数估计等详细结果6 ^8 k1 o+ E e1 R0 V3 H
windows()
8 @( k5 _$ L6 hpar(mfrow=c(2,2))- m! `) w2 O0 Y f# [
plot(lm1,which=c(1:4)) #回归诊断做残差图
) ?; Y5 m8 I! P& Z+ u6 V4 s, c5 o0 L
& o% V/ i6 ~2 G; i7 N6 N+ X) c/ @1 c9 S3 @4 O
1 z8 m+ o3 a' B3 F* I, C2 y7 ]
##变量处理
5 w( ]4 Q. y% Q2 `( P; Q5 p7 x' V6 q" w% O/ _7 y
# |- ~$ f: E; F, D3 I$ n###对不显著的变量采用分组的方式希望能达到显著的效果
7 ]8 j: p7 @9 {: B6 G$ t6 E6 `0 v##对容积率的处理; ^0 `+ X y2 J, Q/ @
windows()6 [2 C0 n% R# W' l0 U
n = 4; Q- b" W ]. i2 b) f& ^
boxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图 ! q; t+ d d& p" @9 {
table(ceiling(rong/n)) #容积率各分组下的样本数
* |0 ?) G: `. u6 k% S. [ronggrp=1*(rong>n) #进行二分类
2 a s9 m5 ]$ [ C u# r#ronggrp=ceiling(rong/n) " p/ ^* w9 h+ {/ I" F2 Y0 [
table(ceiling(ronggrp)) #容积率二分类下的样本数
0 `* n+ y1 [9 h9 Y/ O6 rwindows(): [3 X2 M" Y( ]3 @( B3 V) Z* o
boxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图
9 Q; w4 u" C8 L. H4 g; ~. D& Uwindows()1 H& x, F H8 e
par(mfrow=c(1,2))
$ e5 N( X6 I* ~1 g" O" r! \boxplot(rong~ring) #容积率与环线箱型图
3 W u7 n7 k% J; W' R2 C% aboxplot(price~ring) #房价与环线箱型图 3 W' n4 c2 y4 [8 |' w0 H
#加入容积率分组和容积率分组*所在环线交互因子的模型
: L' q& U: r9 y4 N. jlm2=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)
6 g) A: _ G$ G) Z& {anova(lm2) #方差分析
2 j+ N4 p8 X+ p/ ksummary(lm2) #模型参数估计等详细结果2 \' \; d$ c4 {$ C" v' i8 Z
windows(); F, m" x# D$ w2 ^% [* d
par(mfrow=c(2,2))
5 H, U% A( C: U( cplot(lm1,which=c(1:4)) #回归诊断" b" H8 |7 c3 \7 m4 B7 X% q
0 W/ P9 d! A4 n) }7 i' Q X3 b, u) V* y
3 T+ z- Y! b" B" p N& P- C H##对小区面积的处理
% R7 o6 r6 w5 Hsummary(area), ~) T- h" e( m8 q
plot(area,price)& N( O" {+ y! s
windows()! E* Y& B4 T2 r4 I3 N; L: c
n = 1500001 w) @8 H. `" D9 e
boxplot(price~ceiling(area/n)) % }: h; k. `1 P+ W7 A1 q/ v p
table(ceiling(area/n))
; K3 n9 o- l$ {' j2 \( Wareagrp=1*(area>n)$ j u$ Y$ o, R) m8 Z: L
table(ceiling(areagrp))
. A. }2 f$ Z7 `boxplot(price~ceiling(areagrp))
7 `4 \7 L6 Y% a! m# W! E#加入小区面积分组的模型; h7 d. l6 y7 K. ?& M9 u
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)
* N% c2 Q5 x2 Ianova(lm3) #方差分析
`$ \6 Q4 ?2 Nsummary(lm3) #模型参数估计等详细结果+ A( c! t) E$ y8 P, c# z4 T$ p4 |3 m
windows()
/ O* J# j; g8 n7 R, K) [par(mfrow=c(2,2))& M7 ]' y; j$ p. q8 B | D
plot(lm3,which=c(1:4)) #回归诊断
7 B4 |4 v7 o9 D4 g8 j2 c: x% Q
e; ?* r$ C) i" W* _+ F
+ \% T! Q5 q4 p! r$ t) [+ h7 p##变量选择
' l6 Z1 H0 Z9 I6 Z1 C7 S2 Z) ~( |8 j/ q4 A
9 ?' P u/ k. O% y
##AIC准则下的变量选择6 s2 z) r8 h& [/ [: Y
lm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic
! |$ h# }) Z" u2 D; `- Nsummary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节; V7 a9 U; b B
##BIC准则下的变量选择
% w' }( R6 G1 {! I5 e/ C1 S: }' klm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic' K$ x2 `2 y# s1 P
summary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节
! {: w% u, H" }) ~% ~
* v. _& F; s( ~! c3 m+ K! w5 [; \' W: `6 X* Q, P: z
#选用AIC准则下的模型进行回归诊断
% j" l% }- U: t. X( r2 fwindows()$ |, l, N% b! z4 D
par(mfrow=c(2,2))
+ U# W0 x/ Z) A8 P+ C, ~plot(lm4.aic,which=c(1:4)) / @: j% J% O" ~5 l0 u, |: y
# T* h' x" |5 Y1 E
# B& D( p' G8 l8 r: A. [, y' _4 J2 e- @2 ]: `& [8 x
' e0 v. @' w% X v2 Y
##数据变换* o* f$ T! N! ?# L; A ]
* t6 D2 A2 P" L9 l- v4 j
+ M! A4 @4 M% s#box-cox变换( {( m+ {0 w* v y" f6 L0 z8 W
library(MASS)( K1 r( p. T. D6 `/ c
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))
?# H, ^" A3 j- `3 p p* w/ a0 dI=which(b$y==max(b$y)) #定位似然函数最大的位置
8 J! Z2 u& F$ y W- ~1 f6 k, llambda = b$x[I] #精确的λ值( h Y( M6 _8 ^' i: E W4 b
#λ接近于0,为模型简洁性,可以直接进行对数变换
3 a& z6 }1 ]- G5 u9 N4 elogprice <- log(price)
' z' K: I6 X+ C1 s N& M( Chist(logprice)0 }& y2 |! P0 \( ` k8 d/ V
. {9 n4 E$ @8 _' o2 x8 X) h$ w
, s8 X1 i7 C0 q# m" {+ \ z
##最终模型与诊断
+ S, H8 |) ]$ b; a. [. q
# I8 [3 r" }% Z: t8 u0 C# W1 C8 [3 N5 i1 }- H% i
lm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)4 X q7 D- f5 A0 k8 R! M
windows()
; Y2 d, c- M @& M! _0 apar(mfrow=c(2,2))
" ?* C( A* d6 Tplot(lm6,which=c(1:4))
) P% \/ Z5 A8 T! g0 W0 Nanova(lm6)
: a, ^5 r' C) k- h3 d0 Wsummary(lm6)
! `0 t1 @/ V5 A' f1 o+ l
4 [# o. K. |0 f8 R0 G& [: C. Y. O* Z# p: o+ j
请关注数学中国网微博和数学中国公众号,联系QQ 3243710560- z# H2 D: B4 N( x8 [) j
6 e. L5 X$ U! @9 N; l& ~
# h4 L) g) N' Z: ]+ K; K, M c
8 Q$ }& \) \* r! t8 _6 Q$ f9 ]1 `/ H9 D9 y1 p. T
|
zan
|