前言:回归大作业用R做数值模拟,在生成服从Laplace分布随机数时碰了壁。于是我小脑袋瓜灵机一动,捣鼓半天在python中建了个函数,生成数据后导出再导入到了R中继续,还寻思着以后要是用到Laplace随机数还能重复利用呢!结果深更半夜收到了小翠大佬学弟的魔幻消息,原来r的包里自带有,气得我一气之下还是爬了起来打算记录一下我这一个小时搞出来的玩意,证明没有完全白干,多少有点收获(企图自我安慰
目录
1.R中生成Laplace随机数:(r版本不能过低)
2.python读取excel文件数据
3.python数据导出为xlsx(方法简单且比较笨)
4.R导入xlsx文件中的数据
5.实践过程
point:
install.packages("VGAM")
library(splines)
library(stats4)
library(VGAM)
rlaplace(100,0,0.8)
使用pandas:read_excel;储存为数组形式
import pandas as pd
path=r'文件路径.xlsx'
df=pd.read_excel(path,header=0) #header=0默认第一行为表头
import xlsxwriter
m #假设m为一个100*1000维的矩阵
workbook=xlsxwriter.Workbook('random_laplace.xlsx') #创建一个xlsx文件
wworksheet=workbook.add_worksheet('sheet1') #创建一个工作表,可为空
#将矩阵中每个元素填入到工作表中
for i in range(100):
for j in range (1000):
ws.write(i,j,m[i,j])
workbook.close() #关闭该工作表
library(openxlsx)
#读取到data.frame中
read.xlsx(file, sheetIndex, sheetName=NULL,rowIndex=NULL,
startRow=NULL, endRow=NULL, colIndex=NULL,
as.data.frame=TRUE, header=TRUE)
注:参考:http://t.csdn.cn/KJF67
(1)读取到dataframe中,所以第一行会默认为标题行。
理论上来说header可以解决,但我执行后三个参数都显示错误(为解决);所以最后手动填了个标题行。rowIndex,startrow,endrow为空则默认读取所有。
(2)读取后的数据类型,会转为数据框或者list形式,不能再直接做回归。
所以要将list-->numeric类型再做回归。
y_num<-unlist(y_list)
(3)python中创建一个空矩阵(较难,直接建立一个维数对应的零矩阵再逐步删改)
matrix=np.zeros(shape=(n,m))
1.python:“生成laplace随机数”函数
import numpy as np
import xlsxwriter
def random_laplace(nsample,repeat_time,miu,b):
"""
生成服从拉普拉斯分布(双指数分布)随机数
nsample:生成n个随机数
repeat_time:重复生成次数
miu,b:laplace分布的参数
return:得到随机数矩阵
"""
n=0
# 创建一个空矩阵
random_matrix=np.zeros(shape=(repeat_time,nsample))
while n
2.在R中读取并运行
library(openxlsx)
r_laplace<-read.xlsx("F:/个人嘿嘿嘿/北师大BNU/研一上-课业资料/应用多元线性回归/hw01大作业/laplace_random.xlsx")
xdata<-c(……)
ydata_l<-y_real+r_laplace[i,] #提取第i行的随机数作为误差项加入到y
#将list转化为numeric
ydata_laplace<-unlist(ydata_l)
fit_ols<-lm(ydata_laplace~xdata)