- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 39339 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12497
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1388
- 主题
- 1158
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
|
发表于 2021-10-27 14:50
|显示全部楼层
|
【R语言】回归分析案例:北京市商品房价格影响因素分析
* B& Y! i1 Z. ]3 T这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。
8 @3 d6 @+ {/ ]* F m ^这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题:
# g; k* a9 D# B, Y8 Z; l行描述性统计分析,各连续型变量之间的相关关系如下:( l7 Q, a* F! W2 @2 A! G
6 }+ [* E5 K; e; z' b
名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。
; v5 v5 _4 M% [ r& C/ a
8 ?* c' @6 w. g) P+ h& t( h- K/ X% O9 _- v
最终模型残差图:
0 V: Y! Q. G3 H
" W) W% _5 ^9 c通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:
3 B8 @$ h; N+ m6 T属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比
% y( F0 w$ [% B; x0 ?属性变量的具体影响在此处分析略去。8 r3 ~2 y8 w1 n4 S7 [( c8 {' p
连续型变量的影响主要为:
1 X3 B' v5 Q; V+ s% g9 k! M+ b 绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;
! f; l- S- e. W, G4 d! w( z; Z 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
6 p) b7 g8 W3 b! M同时,原本为连续型变量的容积率经过离散化变为属性变量后:$ N+ _( A H4 d1 V
容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;6 e6 N+ d Q3 x. t% C$ ^6 s. [
容积率与环线之间存在着交互效应。
, O& v. B" _2 ^7 yrm(list=ls()) #清空当前工作空间) Z: @/ x& w ?0 Y3 ~$ d
setwd("D:/回归分析")
5 \; a3 C& A. S! Ba=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a9 V L9 O' U, T% e6 C
View(a)
. h9 E' [* t4 f$ F& v& b' kattach(a)
' E1 F- _% ~0 E1 Z/ M- Qnames(a)0 h2 i+ W7 s( S9 l
7 L- J+ q! O/ {
* g3 w& @: Z2 O3 Q; B# B
##描述性统计5 ^- c! ^* c. H% s% c6 W
! Z2 x) J8 o1 ~- k0 _5 K1 s4 B4 J
#未做处理的响应变量分布情况
- v& k& X' \( G( apar(mfrow=c(1,1))1 M \* o' a" w3 k* J
hist(price)' i) s- i/ N0 y0 t6 Y9 ?
summary(price) #查看响应变量的描述统计量- [( M3 j. L( v2 G/ m4 k
#连续型变量描述性统计
; b' {4 J7 e4 V! i& h2 Kwindows(), _$ X @7 t3 u* O M+ G" ] P
pairs(a[,c(6:10)]) #所有连续型变量间的散点图
8 k R- f5 ?) i9 U8 f! [1 {7 I* Qpar(mfrow=c(2,2)) 0 `/ v1 g% S+ C
plot(rong,price) #每个连续型因变量与响应变量间的散点图7 @2 \' u4 \- K- h
plot(lv,price)
4 L! B4 A- P# w, T7 iplot(area,price)# h2 X ~3 x1 M8 ]! Q9 ]4 b
plot(ratio,price)
" H* a8 V% O0 G: M" A% w6 ksummary(a[,c(6:10)]) #查看连续型变量的描述统计量& S% [" C6 M; E- [
cor(a[,c(6:10)]) #查看连续型变量的相关系数1 T3 v1 {, T7 N5 Z6 O3 Y' E* D- w
#属性变量描述性统计
- L# }, u$ W, B) z( c$ O/ xwindows()
5 G: F2 D" E8 r& p& x. D: fpar(mfrow=c(2,3)) * R, p) B/ F+ I, |
boxplot(price~dis) #每个属性变量关于响应变量的箱型图6 ?) t+ e4 _% C x8 }
boxplot(price~wuye) . ?0 s) L1 ]1 ?8 z% R0 H5 P o n% b7 Q
boxplot(price~fitment) 7 L. a& ]( R* {& i( @( [
boxplot(price~ring) 6 Z3 h; J, C) x3 `2 S4 v# _! @
boxplot(price~contype)
# a( d8 {2 B! l& b3 J
; ^4 M/ ]! k/ \# w3 m9 Q9 o' Z. j2 ^3 t
% D7 l' P6 c. @
( H9 {# |; S8 f1 ?; F
##模型建立
. }( ~' g8 {7 r, T3 ~) [' T ] X6 a) m
$ C. w. p9 s% B, {( J4 g) }6 g
#在方差分析模型基础上加入连续型变量6 c l# ~) c4 J; ?+ V9 _
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
1 m9 k. p) \! l0 X5 j$ `anova(lm1) #方差分析 G5 B& _$ q& g5 l) c3 e$ L- d
summary(lm1) #模型参数估计等详细结果
* O: D* f( E* p8 t4 A" h8 {' Ywindows()9 m2 Z9 E- P; q$ ~# ]3 B
par(mfrow=c(2,2))
& N( M2 M- m( A Fplot(lm1,which=c(1:4)) #回归诊断做残差图
! {1 m( z6 o# C% J- F$ z* B4 @
% J9 S; f( l0 U: r J2 z% B# w6 H% h* o! ^/ F; p: r
; S% c; Z0 q8 L* @ a
* j$ V3 _2 `9 E% c( n7 N. B##变量处理
0 o$ u* w) e8 D. S" r$ l' X& V- W# E3 g; y: {
. o+ ~9 X* ^* L( z###对不显著的变量采用分组的方式希望能达到显著的效果
# ~+ c/ i# d. e8 s##对容积率的处理 q* V( j: {# E" W% [, O7 |
windows()
`4 k. E- v1 ?# H2 J( ] x5 M! an = 4
+ e8 z N! I% C( wboxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图
% u2 u" Z9 k3 A9 ftable(ceiling(rong/n)) #容积率各分组下的样本数
) u' v7 {7 p& C1 N; O8 K4 ^9 V$ yronggrp=1*(rong>n) #进行二分类
2 J6 e; Z5 v6 X* C m& @4 k3 n8 c4 a#ronggrp=ceiling(rong/n) 1 Q$ V# \' B& [
table(ceiling(ronggrp)) #容积率二分类下的样本数
8 z9 p' O4 i4 o% G8 l. ^) t9 Z- uwindows()
; \- c& e* D, P7 k2 Qboxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图: O: C$ z: S9 d5 b+ \; @
windows()
% `9 Y5 X' [3 \0 n! n q- ^/ Tpar(mfrow=c(1,2))
3 i9 x4 x2 k4 g6 E+ o7 K3 A4 pboxplot(rong~ring) #容积率与环线箱型图0 g3 {# ^* [8 |9 M( e6 g4 @8 \+ u
boxplot(price~ring) #房价与环线箱型图
5 C/ l& P! Q5 b q1 X#加入容积率分组和容积率分组*所在环线交互因子的模型9 [- g& b k8 P
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)
$ U6 y* B! a( }% _anova(lm2) #方差分析
( B' N4 k4 h+ m5 ^" P; Osummary(lm2) #模型参数估计等详细结果
( }$ S7 Y) c0 B2 r' d$ X, Awindows(); E0 G. J4 O7 x2 t3 R/ h- X
par(mfrow=c(2,2))3 y, F, U2 B6 C# H' Y
plot(lm1,which=c(1:4)) #回归诊断
* X3 Q. r) |& `; M8 Q/ \ |* {. [( ~2 u& j. p. R6 @% M
0 D7 i' h: q$ \
##对小区面积的处理6 E, |4 `3 q. q' P+ q3 g" A' Q( `
summary(area)
* S! W3 z7 r' K1 U8 Xplot(area,price)
1 [$ S2 _2 G0 twindows()* J9 C$ b' h% E5 [5 r/ v
n = 150000
% U- S3 e6 ^7 B8 \boxplot(price~ceiling(area/n)) 5 R+ a# P" C; P& E# g$ V
table(ceiling(area/n)) 0 Y! R! f7 f8 ~- } j+ q
areagrp=1*(area>n)) S' @! e- o/ y& p
table(ceiling(areagrp))' t- x6 Y e/ s8 M5 N' r# ^
boxplot(price~ceiling(areagrp))
0 N1 V- [4 \7 M; ?#加入小区面积分组的模型
* M6 O3 s5 L' y0 ^! olm3=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)
u3 u% L/ Q1 ?% f; Sanova(lm3) #方差分析# P7 O' F: O: l' l- u, o$ ~
summary(lm3) #模型参数估计等详细结果8 I7 V% B9 A* q1 {9 B% s/ {- k7 ~
windows()) v4 |3 M& M) E V) {
par(mfrow=c(2,2))
6 B6 f) x" |2 `plot(lm3,which=c(1:4)) #回归诊断
6 Y/ Z) E1 m3 S6 K( k& _( y$ M1 x& s4 s" h6 F* x' l7 T3 g3 B+ F
- m- S( P) _$ H
##变量选择
, J& ~/ V2 Q4 r( ~: W+ v# K% {7 {$ R! e0 q9 I' \1 c: H
, @7 f2 S" @8 x: R+ m% A; U##AIC准则下的变量选择
X E6 D& B. _* n( zlm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic, K! T8 L9 i/ ~- W0 S' L" \' H
summary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节! S+ E3 [7 \; D" p" E4 S
##BIC准则下的变量选择
2 B. _: {. x2 L% l7 Tlm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic% i! O% h1 H# Z
summary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节
& C( ~8 J2 p4 h* ]0 l0 G, D$ \# }: [9 B0 M) d1 T
2 j+ C5 N- L/ P4 ]: j' K
#选用AIC准则下的模型进行回归诊断
1 }* m/ o( [. N( y* fwindows()
- o; I' n+ Y1 N7 P9 Q5 Y& U# kpar(mfrow=c(2,2))5 W( X2 B6 X8 D& I
plot(lm4.aic,which=c(1:4))
7 w* G d: L/ F5 |
# H- s, e( N& ?6 _* Q& f* @, T' D! ^* h7 j# q: i! o+ Z' ]4 M2 o
" T- h6 ^% Z9 P2 `' ~. |7 r
; x" S4 o& y0 L* m: c P##数据变换
! B; G+ Y' ^. A; v* X
$ s' M7 F$ }# o! L. |$ O4 N2 c
9 T" k5 O$ `; u#box-cox变换% e' @- ^8 j" ]% g! f3 y% O
library(MASS)
! u6 F) ^3 A- {7 G# o3 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))
3 _$ N8 n2 i: U0 I9 B8 Q9 \3 Y3 OI=which(b$y==max(b$y)) #定位似然函数最大的位置
% ^8 |7 E; F4 ^2 L; j* i; Hlambda = b$x[I] #精确的λ值# T; p3 D; @" Q1 H
#λ接近于0,为模型简洁性,可以直接进行对数变换8 O' T/ w1 G& G) A1 f3 c
logprice <- log(price)
, J: e6 d& f8 g7 chist(logprice)
N* k T) b1 C/ N( A- q
1 L5 A$ {& b% A$ X X
/ a+ X! B; B8 i" \##最终模型与诊断
4 h1 \: d3 w; ?0 H8 |8 E! j8 E
! w5 Y; _/ H; O6 i9 K8 D9 b# P5 V. M0 A/ G( k5 z
lm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)+ v* O" i; h. @0 y( Q
windows()
2 h1 y+ r. o( Q8 _2 h0 B$ N# Rpar(mfrow=c(2,2))
6 t/ D3 w4 f( b. W. Oplot(lm6,which=c(1:4))
# W/ W$ r) H) zanova(lm6)
8 J& r5 d: D$ K" ?; Ksummary(lm6)
% C( v1 l5 ]) s* N8 e9 f" I! W; t, G! ]" L8 X. R6 T
$ T6 f' Q! x' ~; [0 F( q3 V( d% e' o请关注数学中国网微博和数学中国公众号,联系QQ 3243710560* x3 S' f* ~3 R$ W2 C
7 q+ P/ p( j$ F6 s4 r0 i
* s6 a3 U: t" {* A _% Q9 R/ {
& J5 d3 I- V7 e$ j$ ]0 M1 {$ i- B: s# V
|
zan
|