我正在使用MCMCglmm包中的一些贝叶斯线性混合模型R.我的数据包括使用错误测量的预测变量.因此,我想建立一个考虑到这一点的模型.我的理解是,基本的混合效应模型MCMCglmm将仅对响应变量(如ols回归)中的误差最小化.换句话说,垂直误差将被最小化.我想最小化与回归线/平面/超平面正交的误差.
MCMCglmm或者我必须使用JAGS/STAN来进行变量误差(也就是总最小二乘)模型? 我在下面列出了一个数据集,其中一个随机变量height用错误来衡量,以说明基本设置MCMCglmm.
library(nlme)
library(MCMCglmm)
data(Orthodont)
set.seed(1234)
Orthodont$height <- c(rnorm(54, 170, 10), rnorm(54, 150, 10))
prior1 <- list(
B = list(mu = rep(0, 3), V = diag(1e+08, 3)),
G = list(G1 = list(V = 1, nu = 1, alpha.mu = 0, alpha.V = 1000)),
R = list(V = 1, nu = 0.002)
)
model1 <- MCMCglmm(
fixed = distance ~ height + Sex,
random …Run Code Online (Sandbox Code Playgroud) 我从简单实现单变量线性梯度下降开始,但不知道将其扩展到多变量随机梯度下降算法?
单变量线性回归
import tensorflow as tf
import numpy as np
# create random data
x_data = np.random.rand(100).astype(np.float32)
y_data = x_data * 0.5
# Find values for W that compute y_data = W * x_data
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
y = W * x_data
# Minimize the mean squared errors.
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
# Before starting, initialize the variables
init = tf.initialize_all_variables()
# Launch the graph.
sess = tf.Session()
sess.run(init)
# Fit …Run Code Online (Sandbox Code Playgroud) 我正在使用Scala和Spark 2.0来训练一个使用LinearRegression的模型.
val lr = new LinearRegression()
.setMaxIter(num_iter)
.setRegParam(reg)
.setStandardization(true)
val model = lr.fit(data)
Run Code Online (Sandbox Code Playgroud)
这工作正常,我得到了很好的结果.我保存了模型并将其加载到另一个类中以进行一些预测:
val model = LinearRegressionModel.load("models/LRModel")
val result = model.transform(data).select("prediction")
Run Code Online (Sandbox Code Playgroud)
现在我想继续用新数据训练模型,所以我保存了模型并加载它以继续训练.
保存:
model.save("models/LRModel")
lr.save("models/LR")
Run Code Online (Sandbox Code Playgroud)
加载:
val lr = LinearRegression.load("models/LR")
val model = LinearRegressionModel.load("models/LRModel")
Run Code Online (Sandbox Code Playgroud)
问题是,当我加载模型时,没有fit或没有train继续训练的功能.当我加载LinearRegression对象时,它似乎不保存权重,只保存算法的参数.我通过训练相同数量的相同迭代次数来测试它,结果完全相同,rootMeanSquaredError并且在这个学习点上肯定没有收敛.我也无法将模型加载到LinearRegression中,导致错误:
Exception in thread "main" java.lang.NoSuchMethodException: org.apache.spark.ml.regression.LinearRegressionModel.<init>(java.lang.String)
Run Code Online (Sandbox Code Playgroud)
所以问题是,如何让LinearRegression对象使用保存的LinearRegressionModel?
我正在对具有多个预测变量的线性模型的预测值求和,如下面的示例所示,并希望计算该总和的组合方差,标准误差和可能的置信区间。
lm.tree <- lm(Volume ~ poly(Girth,2), data = trees)
Run Code Online (Sandbox Code Playgroud)
假设我有一组Girths:
newdat <- list(Girth = c(10,12,14,16)
Run Code Online (Sandbox Code Playgroud)
为此,我想预测总数Volume:
pr <- predict(lm.tree, newdat, se.fit = TRUE)
total <- sum(pr$fit)
# [1] 111.512
Run Code Online (Sandbox Code Playgroud)
如何获得方差total?
我想用简单的线性回归预测未来某个日期的值,但我不能因为日期格式.
这是我的数据框:
data_df =
date value
2016-01-15 1555
2016-01-16 1678
2016-01-17 1789
...
y = np.asarray(data_df['value'])
X = data_df[['date']]
X_train, X_test, y_train, y_test = train_test_split
(X,y,train_size=.7,random_state=42)
model = LinearRegression() #create linear regression object
model.fit(X_train, y_train) #train model on train data
model.score(X_train, y_train) #check score
print (‘Coefficient: \n’, model.coef_)
print (‘Intercept: \n’, model.intercept_)
coefs = zip(model.coef_, X.columns)
model.__dict__
print "sl = %.1f + " % model.intercept_ + \
" + ".join("%.1f %s" % coef for coef in coefs) #linear model
Run Code Online (Sandbox Code Playgroud)
我试图将日期转换为失败 …
我不想要主效应,因为它与更精细的因子固定效果共线,所以有这些是烦人的NA.
在这个例子中:
lm(y ~ x * z)
Run Code Online (Sandbox Code Playgroud)
我想要x(数字)和z(因素)的相互作用,但不是主要的效果z.
我对178尾自由度的双尾t检验进行了线性回归.该summary函数为我的两个t值提供了两个p值.
t value Pr(>|t|)
5.06 1.04e-06 ***
10.09 < 2e-16 ***
...
...
F-statistic: 101.8 on 1 and 178 DF, p-value: < 2.2e-16
Run Code Online (Sandbox Code Playgroud)
我想用这个公式手动计算t值的p值:
p = 1 - 2*F(|t|)
p_value_1 <- 1 - 2 * pt(abs(t_1), 178)
p_value_2 <- 1 - 2 * pt(abs(t_2), 178)
Run Code Online (Sandbox Code Playgroud)
我没有获得与模型摘要中相同的p值.因此,我想知道summary函数Pr(>|t|)与我的公式有何不同,因为我找不到定义Pr(>|t|).
你能帮助我吗?非常感谢!
我想OLS regression estimation在以下URL中运行数据集的滚动1000窗口以进行评估:
https://drive.google.com/open?id=0B2Iv8dfU4fTUa3dPYW5tejA0bzg
我尝试使用以下Python脚本与pandas版本0.20.2.
# /usr/bin/python -tt
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from statsmodels.formula.api import ols
df = pd.read_csv('estimated.csv', names=('x','y'))
model = pd.stats.ols.MovingOLS(y=df.Y, x=df[['y']],
window_type='rolling', window=1000, intercept=True)
df['Y_hat'] = model.y_predict
Run Code Online (Sandbox Code Playgroud)
但是,当我运行我的Python脚本时,我收到此错误:AttributeError: module 'pandas.stats' has no attribute 'ols'.我发现这个错误的原因是因为它从Pandas版本中删除了,因为0.20.0我们可以从以下链接看到它.
https://github.com/pandas-dev/pandas/pull/11898
我们如何OLS Regression处理最新版本的熊猫?
我正在尝试执行线性回归,对于这样的模型:
Y = aX1 + bX2 + c
Run Code Online (Sandbox Code Playgroud)
所以, Y ~ X1 + X2
假设我有以下响应向量:
set.seed(1)
Y <- runif(100, -1.0, 1.0)
Run Code Online (Sandbox Code Playgroud)
以下预测变量矩阵:
X1 <- runif(100, 0.4, 1.0)
X2 <- sample(rep(0:1,each=50))
X <- cbind(X1, X2)
Run Code Online (Sandbox Code Playgroud)
我想对系数使用以下约束:
a + c >= 0
c >= 0
Run Code Online (Sandbox Code Playgroud)
所以对b没有约束.
我知道glmc包可以用来应用约束,但是我无法确定如何将它应用于我的约束.我也知道可以使用contr.sum,例如,所有系数总和为0,但这不是我想要做的.solve.QP()似乎是另一种可能性,meq=0可以使用设置使所有系数> = 0(同样,这里不是我的目标).
注意:解决方案必须能够处理响应向量Y中的NA值,例如:
Y <- runif(100, -1.0, 1.0)
Y[c(2,5,17,56,37,56,34,78)] <- NA
Run Code Online (Sandbox Code Playgroud) 我正在尝试计算我正在使用的训练数据的错误率.
y 计算如下:
我fitPoly(M)在线上的函数中计算这个49.我相信我的计算不正确y(x(n)),但我不知道还能做什么.
以下是最小,完整和可验证的示例.
import numpy as np
import matplotlib.pyplot as plt
dataTrain = [[2.362761180904257019e-01, -4.108125266714775847e+00],
[4.324296163702689988e-01, -9.869308732049049127e+00],
[6.023323504115264404e-01, -6.684279243433971729e+00],
[3.305079685397107614e-01, -7.897042003779912278e+00],
[9.952423271981121200e-01, 3.710086310489402628e+00],
[8.308127402955634011e-02, 1.828266768673480147e+00],
[1.855495407116576345e-01, 1.039713135916495501e+00],
[7.088332047815845138e-01, -9.783208407540947560e-01],
[9.475723071629885697e-01, 1.137746192425550085e+01],
[2.343475721257285427e-01, 3.098019704040922750e+00],
[9.338350584099475160e-02, 2.316408265530458976e+00],
[2.107903139601833287e-01, -1.550451474833406396e+00],
[9.509966727520677843e-01, 9.295029459100994984e+00],
[7.164931165416982273e-01, 1.041025972594300075e+00],
[2.965557300301902011e-03, -1.060607693351102121e+01]]
def strip(L, xt):
ret = []
for i in L:
ret.append(i[xt])
return ret
x1 = strip(dataTrain, 0)
y1 = strip(dataTrain, 1)
# HELP HERE
def getY(m, w, D): …Run Code Online (Sandbox Code Playgroud) r ×5
python ×4
regression ×3
lm ×2
numpy ×2
pandas ×2
apache-spark ×1
bayesian ×1
date ×1
mcmc ×1
mixed-models ×1
p-value ×1
predict ×1
python-3.x ×1
scala ×1
statistics ×1
tensorflow ×1