对两个csv多组对应列数据作线性回归求R方,斜率和截距

我的数据第一列为时间,所以我将第一列设置索引列
时间后面是三列数据一组,我只求每组数据中的第二列
两个数据行数和列数要一致
最后将每个对应列的数据线性回归计算出来的斜率、截距以及r2保存在一个csv中

import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
from scipy import stats
# 读取第一个 CSV 文件
data1 = pd.read_csv('F:/20240511.csv',encoding="gbk",index_col=0)
import numpy as np
# 读取第二个 CSV 文件
data2 = pd.read_csv('F:/20240511_2.csv',encoding="gbk",index_col=0)
slope_ = []
intercept_=[]
r_value_=[]
# 提取特定列的数据并进行线性回归

n = 0  # 列偏移量,初始值为0
while True:
    # 计算列索引
    col_index = 1 + n * 3  # 从第2列开始,每组数据有3列,计算列索引
    # 检查索引是否超出数据范围
    if col_index >= len(data1.columns):
        break

    # 提取特定列的数据
    group1 = data1.iloc[:, col_index]
    group2 = data2.iloc[:,col_index]
 
    slope, intercept, r_value, _, _ = stats.linregress(group1, group2)
    # 提取相关系数、R方和截距
    slope_.append(slope)
    intercept_.append( intercept)
    r_value_.append( r_value)
    # 更新列偏移量
    n += 1
slops = pd.DataFrame(slope_, columns=[ 'Coefficient'])
intercept = pd.DataFrame(intercept_, columns=[ 'Intercept'])
r_value = pd.DataFrame(r_value_, columns=[ 'R_squared'])
# 使用 pd.concat() 函数按列合并这三个 DataFrame
combined_df = pd.concat([slops, intercept['Intercept'], r_value['R_squared']], axis=1)

combined_df.to_csv('F:/abs-new_20240511slops_results.csv', index=False)
  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在R语言中,你可以使用循环对300数据进行分段线性回归,并将得到的300条回归曲线绘制在一张图上。下面是一个示例代码: ```R # 导入所需的库 library(segmented) library(ggplot2) # 创建一个示例数据框 data <- read.csv("your_data.csv", header = TRUE) # 请将"your_data.csv"替换为你的数据文件路径 # 提取自变量和因变量 x <- data[, 1] y <- data[, -1] # 创建一个空的数据框来存储分段线性回归的结果 results <- data.frame() # 循环对每一数据进行分段线性回归 for (i in 1:ncol(y)) { # 提取当前的因变量 current_y <- y[, i] # 执行分段线性回归 fit <- segmented(lm(current_y ~ x), seg.Z = ~ x) # 提取斜率截距 slope <- coef(fit)[2] intercept <- coef(fit)[1] # 将结果添加到结果数据框中 results <- rbind(results, data.frame(slope = slope, intercept = intercept)) } # 绘制多条曲线在同一坐标轴上 ggplot(data) + geom_line(aes(x = x, y = y[, 1]), color = "blue") + geom_abline(data = results, aes(intercept = intercept, slope = slope), color = "red") + theme_minimal() ``` 在上面的示例中,我们首先导入了`segmented`和`ggplot2`库。然后,我们使用`read.csv()`函数读取你的数据文件,并将自变量存储在`x`中,将因变量存储在`y`中。 然后,我们创建了一个空的数据框`results`,用于存储分段线性回归的结果。 在循环中,我们逐提取因变量数据,并使用`segmented`函数执行分段线性回归。我们提取了斜率截距,并将结果添加到`results`数据框中。 最后,我们使用`ggplot2`库绘制了自变量的曲线和分段线性回归的曲线。自变量的曲线以蓝色绘制,分段线性回归的曲线以红色绘制。 执行上述代码后,你将会得到300条分段线性回归的拟合曲线,并在同一坐标轴上绘制了自变量的曲线和分段线性回归的曲线。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值