我是Gnuplot的忠实粉丝,我在各个项目的研究中都使用它.
最近我想用Gnuplot绘制一些时间序列,如减肥,锻炼结果,气体消耗等.
因此我像x轴一样缩放
set xdata time
set timefmt "%d.%m %Y"
set format x "%d.%m"
Run Code Online (Sandbox Code Playgroud)
现在我想使用fit-function来给我一个线性拟合.我的问题是,如果x轴与时间有关,我就无法工作.
我想在R中对正常和双对数图中的数据进行线性回归.
对于普通数据,数据集可能是以下数据:
lin <- data.frame(x = c(0:6), y = c(0.3, 0.1, 0.9, 3.1, 5, 4.9, 6.2))
plot (lin$x, lin$y)
Run Code Online (Sandbox Code Playgroud)
在那里,我想计算只为数据点2,3和4的线性回归画一条线.
对于双对数数据,数据集可能如下:
data = data.frame(
x=c(1:15),
y=c(
1.000, 0.742, 0.623, 0.550, 0.500, 0.462, 0.433,
0.051, 0.043, 0.037, 0.032, 0.028, 0.025, 0.022, 0.020
)
)
plot (data$x, data$y, log="xy")
Run Code Online (Sandbox Code Playgroud)
在这里,我想绘制数据集1:7和8:15的回归线.
我可以计算斜率和y偏移量作为拟合的参数(R ^ 2,p值)吗?
如何对正常和对数数据做?
谢谢你的帮助,
斯文
在R中,如何设置特定变量的权重而不是lm()函数中的观察值?
背景如下.我正在尝试为特定产品建立个人排名系统,比如手机.我可以建立基于价格的线性模型作为因变量和其他特征,如屏幕尺寸,内存,操作系统等作为自变量.然后,我可以用它来预测手机的实际成本(与宣布的价格相反),从而找到最佳的价格/良好系数.这就是我已经做过的事情.
现在我想"突出"一些对我来说很重要的功能.例如,我可能需要一个具有大内存的手机,因此我想给它更高的权重,以便线性模型针对内存变量进行优化.
lm()R中的函数有weights参数,但这些是观察的权重而不是变量(如果这是错误的,请纠正我).我也试着玩配方,但只有翻译错误.有没有办法将变量的权重合并在一起lm()?
当然,lm()功能不是唯一的选择.如果您知道如何使用其他类似的解决方案(例如glm()),这也很好.
UPD.经过几次评论后,我明白了我对这个问题的思考方式是错误的.通过调用获得的线性模型lm()给出了训练样例的最佳系数,并且没有办法(也没有必要)改变变量的权重,对不起我所做的混乱.我实际上正在寻找的是改变现有线性模型中系数的方法,以手动使一些参数比其他参数更重要.继续前面的例子,假设我们有以下价格公式:
price = 300 + 30 * memory + 56 * screen_size + 12 * os_android + 9 * os_win8
Run Code Online (Sandbox Code Playgroud)
该公式描述了价格和电话参数之间依赖关系的最佳可能线性模型.但是,现在我想手动将memory变量前面的数字30 改为60,所以它变为:
price = 300 + 60 * memory + 56 * screen_size + 12 * os_android + 9 * os_win8
Run Code Online (Sandbox Code Playgroud)
当然,这个公式不再反映价格和手机参数之间的最佳关系.同时因变量并不显示实际价格,只是一些良好的价值,考虑到记忆对我来说比一般人重要两倍(基于第一个公式的系数).但是这种善良的价值(或者更确切地说,分数的价值goodness/price)正是我所需要的 - 有了这个我能找到最好的(在我看来)最好的价格手机.
希望所有这一切都有道理.现在我有一个(可能非常简单)的问题.我怎样才能手动设置在现有的线性模型系数,用获得的lm()?也就是说,我正在寻找类似的东西:
coef(model)[2] <- …Run Code Online (Sandbox Code Playgroud) 我想用python计算多元线性回归.我发现这个代码用于简单的线性回归
import numpy as np
from matplotlib.pyplot import *
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 3, 4, 4, 5])
n = np.max(x.shape)
X = np.vstack([np.ones(n), x]).T
a = np.linalg.lstsq(X, y)[0]
Run Code Online (Sandbox Code Playgroud)
所以,a是系数,但我看不出是什么[0]意思?
如何更改代码以获得多个线性回归?
我有3D堆栈的蒙版数组.我想对每一行的值进行线性回归,col(空间索引)沿轴0(时间).这些堆叠的尺寸各不相同,但典型的形状可能是(50,2000,2000).我的空间有限但时间密集的测试用例具有以下几个方面:
stack.ma_stack.shape
Run Code Online (Sandbox Code Playgroud)
(1461,390,327)
我做了一个快速测试循环每一行,col:
from scipy.stats.mstats import linregress
#Ordinal dates
x = stack.date_list_o
#Note: idx should be row, col
def sample_lstsq(idx):
b = stack.ma_stack[:, idx[0], idx[1]]
#Note, this is masked stats version
slope, intercept, r_value, p_value, std_err = linregress(x, b)
return slope
out = np.zeros_like(stack.ma_stack[0])
for row in np.arange(stack.ma_stack.shape[1]):
for col in np.arange(stack.ma_stack.shape[2]):
out[row, col] = sample_lstsq((row, col))
Run Code Online (Sandbox Code Playgroud)
这很有效(慢慢地).我知道必须有一个更有效的方法.
我开始玩索引数组和np.vectorize,但我认为这实际上不会提供任何真正的改进.我考虑过把所有东西都扔给熊猫或试图移植到Cython,但我希望我能坚持使用NumPy/SciPy.或者并行解决方案是提高性能的最佳选择?
另外,有没有人对NumPy/SciPy线性回归选项进行基准测试?我遇到了以下选项,但没有测试过自己:
我希望有一种现有的方法可以提供显着的性能提升而不需要太多的实现工作.谢谢.
2013年12月3日编辑@ 02:29
@HYRY建议的方法对于上面描述的样本数据集(在所有维度(空间和时间)中)是连续的(未屏蔽的),完美地工作(约15秒运行时).但是,当将包含缺失数据的掩码数组传递给np.linalg.leastsq时,所有掩码值都会用fill_value(defualt 1E20)填充,这会导致伪线性拟合.
幸运的是,numpy蒙面数组模块有np.ma.polyfit(deg = 1),它可以处理像np.linalg.leastsq这样的2D y数组.看一下源代码(https://github.com/numpy/numpy/blob/v1.8.0/numpy/ma/extras.py#L1852),ma polyfit只是np.polyfit的一个包装器,它使用了一个组合掩码来自x和y面具.当y中缺失数据的位置不变时,这适用于2D y.
不幸的是,我的数据在空间和时间上有可变的丢失数据位置.这是另一个堆栈的示例:
In [146]: …Run Code Online (Sandbox Code Playgroud) 在我最近参加的一些机器学习课程中,我已经介绍了梯度下降以找到线性回归的最佳拟合线.
在一些统计课程中,我了解到我们可以使用统计分析来计算这一行,使用均值和标准差 - 本页详细介绍了这种方法.为什么这种看似更简单的技术没有用于机器学习?
我的问题是,梯度下降是拟合线性模型的首选方法吗?如果是这样,为什么?或者教授是否只是在更简单的设置中使用梯度下降来将该类引入技术?
我想使用Tensorflow构建一个多元线性回归模型.
数据集:波特兰房价
一个数据示例:2104,3,399900(前两个是功能,最后一个是房价;我们有47个示例)
代码如下:
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
# model parameters as external flags
flags = tf.app.flags
FLAGS = flags.FLAGS
flags.DEFINE_float('learning_rate', 1.0, 'Initial learning rate.')
flags.DEFINE_integer('max_steps', 100, 'Number of steps to run trainer.')
flags.DEFINE_integer('display_step', 100, 'Display logs per step.')
def run_training(train_X, train_Y):
X = tf.placeholder(tf.float32, [m, n])
Y = tf.placeholder(tf.float32, [m, 1])
# weights
W = tf.Variable(tf.zeros([n, 1], dtype=np.float32), name="weight")
b = tf.Variable(tf.zeros([1], dtype=np.float32), name="bias")
# linear model
activation = tf.add(tf.matmul(X, …Run Code Online (Sandbox Code Playgroud) 我是R和统计学的新手,并且无法弄清楚如何在运行多元线性回归后绘制预测值与实际值的关系.我遇到过类似的问题(只是无法理解代码).如果您解释一下代码,我将不胜感激.这是我到目前为止所做的:
# Attach file containing variables and responses
q <- read.csv("C:/Users/A/Documents/Design.csv")
attach(q)
# Run a linear regression
model <- lm(qo~P+P1+P4+I)
# Summary of linear regression results
summary(model)
Run Code Online (Sandbox Code Playgroud)
预测与实际的关系是如此,我可以用图形方式看出我的回归在我的实际数据中的适合程度.
我一直在使用Limma包中的makeContrasts函数来创建对比,我理解如何进行简单的对比,例如将每个治疗与控件独立比较或比较两种治疗方法:
makeContrasts(A_vs_Ctrl = "A - Control", B_vs_Ctrl = "B - Control",
C_vs_Ctrl = "C - Control", A_vs_B = "A - B",
levels = c("Control", "A", "B", "C"))
Contrasts
Levels A_vs_Ctrl B_vs_Ctrl C_vs_Ctrl A_vs_B
Control -1 -1 -1 0
A 1 0 0 1
B 0 1 0 -1
C 0 0 1 0
Run Code Online (Sandbox Code Playgroud)
我的问题是,当每种治疗方法被认为是相对于对照时,如何对两种治疗方法之间的对比进行编码?例如,我想确定何时A_vs_Ctrl和之间存在差异B_vs_Ctrl; 这个想法是,这将表明治疗A和治疗何时以不同的方式而不是以相同的方式B与Control病症不同.我对此的尝试如下,但我不认为这是正确的,我无法理解如何在对比中正确编码这个假设.
makeContrasts(AvsCtrl_VS_BvsCtrl = "(A - Control)/2 - (B - Control)/2",levels=c( "Control","A","B","C"))
Contrasts
Levels AvsCtrl_VS_BvsCtrl
Control 0.0 …Run Code Online (Sandbox Code Playgroud) r ×5
numpy ×3
python ×3
plot ×2
gnuplot ×1
limma ×1
lm ×1
pandas ×1
power-law ×1
statistics ×1
statsmodels ×1
tensorflow ×1
time-series ×1