83 票房线性回归 Linear regression of film box office

2023-10-16 23:59

本文主要是介绍83 票房线性回归 Linear regression of film box office,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 数据统计与预览

library(raster)
a = read.csv("film.csv", header = T)                  ##读入数据,不要将字符串视为factor
summary(a)                                                                 ##查看数据基本情况,检查缺失情况
a = na.omit(a)                                                             ##将数据集里全部NA所在行删除
film_high = a[which.max(a$boxoffice),]                                     ##查看票房最高纪录
film_low = a[which.min(a$boxoffice),]                                      ##查看票房最低纪录

在这里插入图片描述

2 数据预览

library(wordcloud)
col<-brewer.pal(8,"Accent")
h<-hist(a$boxoffice,breaks=12,col=col)
xfit <-seq(min(a$boxoffice),max(a$boxoffice),length=40)
yfit <-dnorm(xfit,mean=mean(a$boxoffice),sd=sd(a$boxoffice))  #dnorm返回的是正态分布概率函数值
yfit <- yfit*diff(h$mids[1:2]) *length(a$boxoffice)
lines(xfit,yfit,col='red',lwd=2)
summary(a$boxoffice)

在这里插入图片描述
数据右偏分布数据,对y取对数处理

3 分箱处理数据与预览

##票房直方图
boxbar<-as.data.frame(table(cut(a$boxoffice,breaks=c(1000*(1:5),7000,10000,50000,100000,130000),labels=c('1-2千万','2-3千万','3-4千万','4-5千万','5-7千万','7千万-1亿','1-5亿','5-10亿','大于10亿'))))
barplot(boxbar$Freq,names.arg=boxbar$Var1,col="dodgerblue",xlab="票房(万元)",ylab="频数")as.data.frame(table(a$genre))

在这里插入图片描述

boxplot(log(boxoffice)~genre,xlab="电影类型",data=a,col="indianred1",ylab="对数票房",varwidth=T)                ##电影类型箱线图
as.data.frame(table(a$month))                                                             ##上映月份统计
boxplot(log(boxoffice)~month,xlab="月份",data=a,col="dodgerblue",ylab="对数票房",varwidth=T) ```

在这里插入图片描述
在这里插入图片描述

4 完成数据清理函数


dataclean<-function(a){a$dangqi<-cut(a$month,breaks=c(0,2,4,6,9,11),labels=c('贺岁档','普通档','黄金1档','暑期档','黄金2档'))a$dangqi[is.na(a$dangqi)]<-'贺岁档'a$distribute<-factor(a$distribute,levels=c('C','G','L','S'),labels=c('联合发行','国有宣发','小私营公司','明星私企'))a$reality<-factor(a$reality,levels=c(0,1),labels=c('否','是'))a$story<-factor(a$story,levels=c('N','S'),labels=c('原创','虚构'))a$remake<-factor(a$remake,levels=c(0,1),labels=c('否','是'))a$sequel<-factor(a$sequel,levels=c(0,1),labels=c('否','是'))a$导演得奖情况<-factor(a$导演得奖情况,levels=c(0,1),labels=c('否','是'))a$导演是否转型<-factor(a$导演是否转型,levels=c(0,1),labels=c('否','是'))a$导演年代[a$导演年代<50]="50以下"                                     ##将30和40年代合并为50以下a$导演年代=factor(a$导演年代,c("50以下","50","60","70","80"))          ##更改因子水平顺序return(a)

a<-dataclean(a)

table(a$dangqi)                                                            ##上映档期统计
boxplot(log(boxoffice)~dangqi,xlab="档期",data=a,col="yellow",ylab="对数票房",varwidth=T)                    ##上映档期箱线图table(a$distribute)                                                        ##宣发公司统计
boxplot(log(boxoffice)~distribute,xlab="宣发公司",data=a,col="dodgerblue",ylab="对数票房",varwidth=T)                ##宣发公司箱线图par(mfrow=c(2,2))                                                          ##输出2行2列图形
boxplot(log(boxoffice)~reality,data=a,col=c("dodgerblue"),ylab="对数票房",xlab="是否真实",varwidth=T)                        ##是否真实
boxplot(log(boxoffice)~story,data=a,col=c("indianred1"),ylab="",xlab="是否改编",varwidth=T)                                ##是否原创
boxplot(log(boxoffice)~remake,data=a,col=c("lightgreen"),ylab="",xlab="是否翻拍",varwidth=T)                                ##是否翻拍
boxplot(log(boxoffice)~sequel,data=a,col=c("purple"),ylab="",xlab="是否有续集",varwidth=T)                              ##是否续集par(mfrow=c(1,2))                                                          ##输出1行2列图形
boxplot(log(boxoffice)~导演得奖情况,data=a,col=c("indianred1"),ylab="对数票房",xlab="",main="导演获奖 vs 票房",varwidth=T)        ##导演是否获奖
boxplot(log(boxoffice)~导演是否转型,data=a,col=c("purple"),ylab="",xlab="",main="导演转型 vs 票房",varwidth=T)                ##导演是否转型
par(mfrow=c(1,1))  
## 在比较导演年代时,我建议把30和40的统计归为50年代以下,这样不需要删样本
boxplot(log(boxoffice)~导演年代,data=a,col=c("orange"),                    ##不同年代导演的区别ylab="对数票房",xlab="导 演 年 代",varwidth=T)
table(a$导演年代)
summary(a$boxoffice)
lm=lm(log(boxoffice)~genre+as.factor(year)+runtime+dangqi+distribute+reality+story+remake+sequel+导演得奖情况+导演是否转型,data=a)    ##拟合线性模型
summary(lm)                                                                ##给出估计结果
lm_s<-step(lm,direction="both")
summary(lm_s)
plot(resid(lm_s)~predict(lm_s))
abline(h=0)
sum(resid(lm_s)^2)/sum(predict(lm_s))

在这里插入图片描述
在这里插入图片描述

5 建模与评估

lm=lm(log(boxoffice)~genre+as.factor(year)+runtime+dangqi+distribute+reality+story+remake+sequel+导演得奖情况+导演是否转型,data=a)    ##拟合线性模型
summary(lm)                                                                ##给出估计结果
lm_s<-step(lm,direction="both")
summary(lm_s)
plot(resid(lm_s)~predict(lm_s))
abline(h=0)
sum(resid(lm_s)^2)/sum(predict(lm_s))

在这里插入图片描述
残差占比

在这里插入图片描述

6 残差分析

residplot=function(fit,nbreak=10){z=rstandard(fit)hist(z,breaks=nbreak,freq=F,xlab="Resuduals",main="Distribution of Errors")curve(dt(x,1),add=T,col="blue",lwd=2)curve(dnorm(x,mean =mean(z),sd=sd(z)),add=T,col="green",lwd=2)legend("topright",legend=c("Normal Curve","t curve"),lty=1:2,col=c("green","blue"),cex=0.8)
}qqnorm(lm_s$residuals)
qqline(lm_s$residuals)
residplot(lm_s)

在这里插入图片描述

在这里插入图片描述
残差的结果符合正态性检验

7预测结果

library(car)
vif(lm_s)    #vif##预测第一部电影的票房
b = read.csv("predict.csv", header = T)  
b<-dataclean(b)
bb = exp(predict(lm,b))
bb

在这里插入图片描述

这篇关于83 票房线性回归 Linear regression of film box office的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/221606

相关文章

线性因子模型 - 独立分量分析(ICA)篇

序言 线性因子模型是数据分析与机器学习中的一类重要模型,它们通过引入潜变量( latent variables \text{latent variables} latent variables)来更好地表征数据。其中,独立分量分析( ICA \text{ICA} ICA)作为线性因子模型的一种,以其独特的视角和广泛的应用领域而备受关注。 ICA \text{ICA} ICA旨在将观察到的复杂信号

论文翻译:ICLR-2024 PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS

PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS https://openreview.net/forum?id=KS8mIvetg2 验证测试集污染在黑盒语言模型中 文章目录 验证测试集污染在黑盒语言模型中摘要1 引言 摘要 大型语言模型是在大量互联网数据上训练的,这引发了人们的担忧和猜测,即它们可能已

理解分类器(linear)为什么可以做语义方向的指导?(解纠缠)

Attribute Manipulation(属性编辑)、disentanglement(解纠缠)常用的两种做法:线性探针和PCA_disentanglement和alignment-CSDN博客 在解纠缠的过程中,有一种非常简单的方法来引导G向某个方向进行生成,然后我们通过向不同的方向进行行走,那么就会得到这个属性上的图像。那么你利用多个方向进行生成,便得到了各种方向的图像,每个方向对应了很多

解决Office Word不能切换中文输入

我们在使用WORD的时可能会经常碰到WORD中无法输入中文的情况。因为,虽然我们安装了搜狗输入法,但是到我们在WORD中使用搜狗的输入法的切换中英文的按键的时候会发现根本没有效果,无法将输入法切换成中文的。下面我就介绍一下如何在WORD中把搜狗输入法切换到中文。

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

1️⃣线性回归(linear regression) f w , b ( x ) = w x + b f_{w,b}(x) = wx + b fw,b​(x)=wx+b 🎈A linear regression model predicting house prices: 如图是机器学习通过监督学习运用线性回归模型来预测房价的例子,当房屋大小为1250 f e e t 2 feet^

perl的学习记录——仿真regression

1 记录的背景 之前只知道有这个强大语言的存在,但一直侥幸自己应该不会用到它,所以一直没有开始学习。然而人生这么长,怎就确定自己不会用到呢? 这次要搭建一个可以自动跑完所有case并且打印每个case的pass信息到指定的文件中。从而减轻手动跑仿真,手动查看log信息的重复无效低质量的操作。下面简单记录下自己的思路并贴出自己的代码,方便自己以后使用和修正。 2 思路整理 作为一个IC d

【高等代数笔记】线性空间(一到四)

3. 线性空间 令 K n : = { ( a 1 , a 2 , . . . , a n ) ∣ a i ∈ K , i = 1 , 2 , . . . , n } \textbf{K}^{n}:=\{(a_{1},a_{2},...,a_{n})|a_{i}\in\textbf{K},i=1,2,...,n\} Kn:={(a1​,a2​,...,an​)∣ai​∈K,i=1,2,...,n

用Python实现时间序列模型实战——Day 14: 向量自回归模型 (VAR) 与向量误差修正模型 (VECM)

一、学习内容 1. 向量自回归模型 (VAR) 的基本概念与应用 向量自回归模型 (VAR) 是多元时间序列分析中的一种模型,用于捕捉多个变量之间的相互依赖关系。与单变量自回归模型不同,VAR 模型将多个时间序列作为向量输入,同时对这些变量进行回归分析。 VAR 模型的一般形式为: 其中: ​ 是时间  的变量向量。 是常数向量。​ 是每个时间滞后的回归系数矩阵。​ 是误差项向量,假

带头结点的线性链表的基本操作

持续了好久,终于有了这篇博客,链表的操作需要借助图像模型进行反复学习,这里尽可能的整理并记录下自己的思考,以备后面复习,和大家分享。需要说明的是,我们从实际应用角度出发重新定义了线性表。 一. 定义 从上一篇文章可以看到,由于链表在空间的合理利用上和插入、删除时不需要移动等优点,因此在很多场合下,它是线性表的首选存储结构。然而,它也存在某些实现的缺点,如求线性表的长度时不如顺序存储结构的

浙大数据结构:02-线性结构4 Pop Sequence

这道题我们采用数组来模拟堆栈和队列。 简单说一下大致思路,我们用栈来存1234.....,队列来存输入的一组数据,栈与队列进行匹配,相同就pop 机翻 1、条件准备 stk是栈,que是队列。 tt指向的是栈中下标,front指向队头,rear指向队尾。 初始化栈顶为0,队头为0,队尾为-1 #include<iostream>using namespace std;#defi